如何使用名称选择SQL中最常用的项目

时间:2015-02-05 15:43:05

标签: sql sql-server tsql aggregate-functions

我试图选择最常出现的项目。此代码有效,但我不知道如何从Item表中获取它的相应ItemName而不会出错

SELECT 
     TransactionDetail.ItemID, COUNT(*) AS 'AmountSold'
FROM TransactionDetail
GROUP BY TransactionDetail.ItemID
ORDER BY COUNT(*) DESC 

尝试过的代码:

SELECT 
      TransactionDetail.ItemID, 
      COUNT(*) AS 'AmountSold'
FROM TransactionDetail
JOIN Item
ON Item.ItemID = TransactionDetail.ItemID
WHERE Item.ItemID = TransactionDetail.ItemID
GROUP BY TransactionDetail.ItemID
ORDER BY COUNT (*) DESC

2 个答案:

答案 0 :(得分:3)

SELECT TransactionDetail.ItemID9
      ,Item.ItemName
      , COUNT(*) AS [AmountSold]
FROM TransactionDetail
INNER JOIN Item  ON Item.ItemID = TransactionDetail.ItemID
GROUP BY TransactionDetail.ItemID , Item.ItemName
ORDER BY AmountSold DESC

答案 1 :(得分:0)

我不确定您在Item表中有多少项,但是您可以通过在初始select语句后滚动查询来对计数进行分组。

例如。

Select
Case When rollup.ItemName like 'itemName1' Then count(rollup.ItemID) end as 'itemName1',
Case When rollup.ItemName like 'itemName2' Then count(rollup.ItemID) end as 'itemName2',
Case When rollup.ItemName like 'itemName3' Then count(rollup.ItemID) end as 'itemName3',

from 
(
Select Item.ItemName,
TransactionDetail.ItemID

FROM TransactionDetail
JOIN Item
ON Item.ItemID = TransactionDetail.ItemID
WHERE Item.ItemID = TransactionDetail.ItemID

)as rollup 

- 您可以在此处输入订单,以降序列出结果。如果你有成千上万的物品,这不是最好的方法。