繁体   English   中英

SQL查询-使用cols从表中获取最畅销的商品(腌制数量,商品编号,否)

[英]SQL query - get top sold items from table with cols (saled qty, item no, no )

您好,我有一个带有列的表:

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

现在我应该获得销量最高的产品。 也许我必须以某种方式将其按项目编号分组 ,然后按已售数量进行分类,然后例如可以选择前3名

更新:还有其他我不需要的列,但是由于它们,我得到了错误:

timestamp”在选择列表中无效,因为它既不在聚合函数中也不在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子句中。

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替换为所需数量的产品即可。

说明:当您进行分组依据时,您只能在结果中包括属于分组依据子句一部分或以某种方式进行汇总的列。 在这里,我使用了SUM来汇总saled_qty列,并且省略了查询中的所有其他列。

想到这一点的最好方法是想象您自己而不是SQL对数据进行分组。...说我们按item_no进行分组...您打算如何知道如何处理所有saled_qty值? 结果的每一行都将具有多个saled_qty值(分组子句中任何内容一行,在此情况下为item_no)。 SQL不允许您对此模棱两可,因此会引发错误。

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

它会工作:

SELECT TOP 3 * FROM tbl GroupBy item_no ORDER BY saled_qty DESC
SELECT saledqty,itemno, no
FROM Table1
WHERE saledqty IN (
SELECT TOP 3 MAX(saledqty) As Sale
FROM Table1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM