哪种产品订购最频繁?

Which product is ordered most frequently?

SELECT ProductID
FROM OrderLine_T
GROUP BY ProductID
ORDER BY COUNT(ProductID) DESC

我正在订购这样的产品,但 LIMITROWNUM 由于某种原因无法使用。我只需要查询最常订购的单一产品。我正在使用 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" 你可能会观察到 LIMITROWNUM 为 "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 ..."

等等