SQL查询 - 使用cols从表中获取最畅销的商品(saled qty,item no,no)

时间:2014-04-16 10:38:07

标签: sql sql-server select group-by

您好我有一个包含列的表格:

saled qty, item no, no
-3, 1996-s, 149
-2, 1996-s, 150
-2, 1968-b, 151

现在我应该获得热销产品。也许我必须按项目no 分组,然后按saled qty排序,然后我可以选择前3 例如?

更新 还有其他一些我不需要的专栏,但是因为我得到了错误:

时间戳'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

差不多

SELECT TOP(3) [Item No_], SUM([Invoiced Quantity]) as [qty] 
FROM 
    [Demo Database NAV (7 - 1)].[dbo].[CRONUS (Schweiz) AG$Value Entry]
GROUP BY 
    [Item No_]
HAVING [Item Ledger Entry Type] = 1
ORDER BY 
    SUM([Invoiced Quantity]) DESC

给出错误:项目分类帐输入类型'在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY子句中。

4 个答案:

答案 0 :(得分:0)

SELECT TOP(3) 
    item_no, 
    SUM(saled qty) 
FROM 
    TABLENAME 
GROUP BY 
    item_no, [Item Ledger Entry Type]
HAVING [Item Ledger Entry Type] = 1
ORDER BY 
    SUM(saled qty) DESC

SELECT TOP(3) 
    item_no, 
    SUM(saled qty) 
FROM 
    TABLENAME 
WHERE [Item Ledger Entry Type] = 1
GROUP BY 
    item_no
ORDER BY 
    SUM(saled qty) DESC

取决于您是要进行预聚合过滤还是后聚合过滤

只需用您想要的任意数量的产品替换3。

说明: 当您按组执行分组时,只能在结果中包含列,这些列是group by子句的一部分,或者以某种方式聚合。在这里,我使用了汇总saled_qty列的SUM,并且我已经从查询中省略了所有其他列。

想到这一点的最好方法是想象你自己而不是SQL正在对数据进行分组....假设我们按item_no分组...你怎么知道如何处理所有saled_qty值?对于结果的每一行,您将有多个saled_qty值(分组子句中的每一行都有一行...在本例中为item_no)。 SQL不会让你对此产生歧义,因此会抛出错误。

答案 1 :(得分:0)

SELECT TOP 3 * FROM table GroupBy itemno ORDER BY saledqty DESC

<强>更新

如果您还需要选择其他列,请将它们包含在GroupBy子句中。

例如:

  SELECT TOP 3 count(itemno),itemno,timestamp FROM table GroupBy itemno,timestamp ORDER BY saledqty DESC

答案 2 :(得分:0)

它会起作用:

SELECT TOP 3 * FROM tbl GroupBy item_no ORDER BY saled_qty DESC

答案 3 :(得分:0)

SELECT saledqty,itemno, no
FROM Table1
WHERE saledqty IN (
SELECT TOP 3 MAX(saledqty) As Sale
FROM Table1