【问题标题】:How to Select the Most Occuring Items in SQL with Names如何使用名称选择 SQL 中出现次数最多的项目
【发布时间】:2015-02-05 15:43:05
【问题描述】:

我正在尝试选择出现次数最多的项目。此代码有效,但我不知道如何从 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

【问题讨论】:

  • 你能分享两个表的 DDL 吗?

标签: sql sql-server tsql aggregate-functions


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    我不确定您在 Item 表中有多少 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 
    

    --您可以在此处最后输入 order by 以按降序列出结果。如果您有数千个项目,这将不是最好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 2018-11-06
      • 2013-05-18
      • 1970-01-01
      • 2014-01-27
      • 2021-07-30
      相关资源
      最近更新 更多