哪种产品最常订购?

时间:2016-04-11 23:21:21

标签: sql teradata

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

我订购了这样的产品,但LIMITROWNUM由于某种原因无效。我需要查询只有最常订购的产品。我使用Teradata,数据库名称是db_pvfc10_big。我很抱歉这个令人困惑的问题是我的第一个问题,也是我使用SQL的初学者

提前谢谢

2 个答案:

答案 0 :(得分:1)

LIMIT关键字是标准的MySQL特定扩展。

ROWNUM是特定于Oracle的伪列。

因此,您可能会将LIMITROWNUM视为“无法正常运作”,这肯定会有“某些原因”。

问题并未表明正在使用哪个 RDBMS ... MySQL,PostgreSQL,Oracle,SQL Server,DB2,Teradata等。

(注意:使用“不起作用”作为您观察到的行为的唯一描述是相当不精确的。

描述并不表示查询的执行是返回某种错误,还是查询正在执行并返回不期望的结果集。

您描述为“不起作用”的陈述甚至没有显示。

获得结果的一种ANSI标准SQL方法是使用标准MAX()聚合获得“最大”值。一种方法是使用内联视图。例如:

  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

请注意,如果有两个或更多产品的订购次数相同“最大”次数,则此查询将只返回其中一个产品。

这应该适用于大多数关系数据库。

还有其他查询模式会返回相同的结果。

但是这个例子应该有助于解释为什么大多数RDBMS都提供SQL标准的扩展,这通常会使查询更简单。

MySQL“... ORDER BY ... LIMIT 1”

SQL Server“SELECT TOP 1 ...”

答案 1 :(得分:0)

您可以尝试在select语句中包含count(ProductID)。一些sql数据库使用关键字“top”而不是“limit”。因此,如果您正在使用其中一个(例如Teradata sql),请执行以下操作:

select top 1 ProductID, count(ProductID)
from OrderLine_T
group by ProductID
order by 2 desc;