哪种产品订购最频繁?
Which product is ordered most frequently?
SELECT ProductID
FROM OrderLine_T
GROUP BY ProductID
ORDER BY COUNT(ProductID) DESC
我正在订购这样的产品,但 LIMIT
或 ROWNUM
由于某种原因无法使用。我只需要查询最常订购的单一产品。我正在使用 Teradata,数据库名称是 db_pvfc10_big 。对于这个令人困惑的问题,我很抱歉,这是我的第一个问题,我是使用 SQL
的初学者
提前致谢
您可以尝试在 select 语句中包含 count(ProductID)。一些 sql 数据库使用关键字 "top" 而不是 "limit"。因此,如果您使用其中之一(例如 Teradata sql),请执行以下操作:
select top 1 ProductID, count(ProductID)
from OrderLine_T
group by ProductID
order by 2 desc;
LIMIT
关键字是 MySQL 标准的特定扩展。
而ROWNUM
是Oracle特有的伪列。
所以肯定有 "some reasons" 你可能会观察到 LIMIT
和 ROWNUM
为 "not functioning"。
问题没有指出正在使用哪个 RDBMS...MySQL、PostgreSQL、Oracle、SQL 服务器、DB2、Teradata 等
(注意:使用 "not functioning" 作为对您观察到的行为的唯一描述是相当不准确的。
该描述未指明查询的执行是否 return 出现某种错误,或者查询是否正在执行并 return 出现非预期的结果集.
您描述为 "not functioning" 的陈述甚至没有显示。
获得结果的一种 ANSI 标准 SQL 方法是使用标准 MAX()
聚合获得 "maximum" 值。一种方法是使用内联视图。例如:
SELECT MAX(s.cnt) AS max_cnt
FROM ( SELECT COUNT(t.productid) AS cnt
FROM orderline_t t
GROUP BY t.productid
) s
也可以用作内联视图...
SELECT MAX(q.productid)
FROM ( SELECT MAX(s.cnt) AS max_cnt
FROM ( SELECT COUNT(t.productid) AS cnt
FROM orderline_t t
GROUP BY t.productid
) s
) r
JOIN ( SELECT p.productid
, COUNT(p.productid) AS cnt
FROM orderline_t p
GROUP BY p.product_id
) q
ON q.cnt = r.max_cnt
请注意,如果有两个或多个产品的订购次数相同 "maximum",则此查询将 return 只是其中一个产品 ID。
这应该适用于大多数关系数据库。
还有其他查询模式会 return 等效结果。
但是这个例子应该有助于解释为什么大多数 RDBMS 提供对 SQL 标准的扩展,这通常可以简化查询。
MySQL“...订购...限制 1”
SQL 服务器 "SELECT TOP 1 ..."
等等
SELECT ProductID
FROM OrderLine_T
GROUP BY ProductID
ORDER BY COUNT(ProductID) DESC
我正在订购这样的产品,但 LIMIT
或 ROWNUM
由于某种原因无法使用。我只需要查询最常订购的单一产品。我正在使用 Teradata,数据库名称是 db_pvfc10_big 。对于这个令人困惑的问题,我很抱歉,这是我的第一个问题,我是使用 SQL
提前致谢
您可以尝试在 select 语句中包含 count(ProductID)。一些 sql 数据库使用关键字 "top" 而不是 "limit"。因此,如果您使用其中之一(例如 Teradata sql),请执行以下操作:
select top 1 ProductID, count(ProductID)
from OrderLine_T
group by ProductID
order by 2 desc;
LIMIT
关键字是 MySQL 标准的特定扩展。
而ROWNUM
是Oracle特有的伪列。
所以肯定有 "some reasons" 你可能会观察到 LIMIT
和 ROWNUM
为 "not functioning"。
问题没有指出正在使用哪个 RDBMS...MySQL、PostgreSQL、Oracle、SQL 服务器、DB2、Teradata 等
(注意:使用 "not functioning" 作为对您观察到的行为的唯一描述是相当不准确的。
该描述未指明查询的执行是否 return 出现某种错误,或者查询是否正在执行并 return 出现非预期的结果集.
您描述为 "not functioning" 的陈述甚至没有显示。
获得结果的一种 ANSI 标准 SQL 方法是使用标准 MAX()
聚合获得 "maximum" 值。一种方法是使用内联视图。例如:
SELECT MAX(s.cnt) AS max_cnt
FROM ( SELECT COUNT(t.productid) AS cnt
FROM orderline_t t
GROUP BY t.productid
) s
也可以用作内联视图...
SELECT MAX(q.productid)
FROM ( SELECT MAX(s.cnt) AS max_cnt
FROM ( SELECT COUNT(t.productid) AS cnt
FROM orderline_t t
GROUP BY t.productid
) s
) r
JOIN ( SELECT p.productid
, COUNT(p.productid) AS cnt
FROM orderline_t p
GROUP BY p.product_id
) q
ON q.cnt = r.max_cnt
请注意,如果有两个或多个产品的订购次数相同 "maximum",则此查询将 return 只是其中一个产品 ID。
这应该适用于大多数关系数据库。
还有其他查询模式会 return 等效结果。
但是这个例子应该有助于解释为什么大多数 RDBMS 提供对 SQL 标准的扩展,这通常可以简化查询。
MySQL“...订购...限制 1”
SQL 服务器 "SELECT TOP 1 ..."
等等