按部门划分的前 10 项
Posted
技术标签:
【中文标题】按部门划分的前 10 项【英文标题】:Top 10 Items By Dept 【发布时间】:2017-10-19 19:36:37 【问题描述】:我在调整此查询以按部门获取前 10 种销售风格时遇到问题。我在网上看到了各种关于如何使用子查询执行此操作的示例,但没有一个包含条件或连接,所以我有点迷茫。
我当前的查询如下。任何帮助将不胜感激!
SELECT
T1.DEPT,
T1.SKU,
T1.COLOR,
SUM(T1.SALES) AS Sales,
SUM(T1.GP) AS GP
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.Date = T2.Date
WHERE
T2.Year = '2017'
AND T2.Month in ("July, August")
GROUP BY
T1.DEPT,
T1.SKU,
T1.COLOR
ORDER BY 4
【问题讨论】:
类似于:***.com/questions/41220690/… 使用相关子查询并在 选择前 10 名....***.com/questions/9339079/… @xQbert 我已经尝试过这个示例,但我仍然卡住了,因为我的示例使用了总和和分组,我不确定在这种情况下如何将其应用于父查询和子查询。 @Frank 这只选择前 10 个查询,而不是 Dept 的前 10 个查询。 您是在寻找每个部门的前 10 名还是整体上的前 10 名。总和(销售额)最高的是最畅销的款式? 【参考方案1】:SELECT TOP 10 T1.DEPT, T1.SKU, T1.COLOR FROM T1 IN (
SELECT
T1.DEPT,
T1.SKU,
T1.COLOR,
SUM(T1.SALES) AS Sales,
SUM(T1.GP) AS GP
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.Date = T2.Date
WHERE
T2.Year = '2017'
AND T2.Month in ("July, August")
GROUP BY
T1.DEPT,
T1.SKU,
T1.COLOR
ORDER BY 4)
【讨论】:
OP 需要按部门 您可能必须为每个部门单独运行查询才能获得您的要求。【参考方案2】:只需将您的聚合查询保存为存储的 Access 查询,然后在引用聚合的新查询中运行相关计数子查询:
SELECT DEPT, SKU, COLOR, Sales, GP,
(SELECT Count(*) FROM QueryAgg sub
WHERE sub.Sales >= QueryAgg.Sales
AND sub.DEPT = QueryAgg.DEPT) As [Rank]
FROM QueryAgg
WHERE (SELECT Count(*) FROM QueryAgg sub
WHERE sub.Sales >= QueryAgg.Sales
AND sub.DEPT = QueryAgg.DEPT) <= 10
ORDER BY DEPT, Sales DESC
【讨论】:
【参考方案3】:select T.dept,
T.sku,
T.color,
T.Sales as sumsales,
T.GP as sumgp
row_number() over(partition by T.dept order by T.Sales desc) as rownum
from (SELECT T1.DEPT, T1.SKU, T1.COLOR,
SUM(T1.SALES) AS Sales,
SUM(T1.GP) AS GP
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.Date = T2.Date
WHERE T2.Year = '2017'
AND T2.Month in ("July, August")
GROUP BY T1.DEPT, T1.SKU, T1.COLOR) T
where T.rownum <= 10
在 From 子句中处理您的查询。然后按部门拆分,按销售额排序。然后检索每个部门的前 10 名销售额
你可以替换这个
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.Date = T2.Date
WHERE T2.Year = '2017'
AND T2.Month in ("July, August")
作为
FROM TABLE T1
WHERE T1.Year = '2017'
AND T1.Month in ("July", "August")
我没有看到 T2 在任何地方使用,也不需要自我加入。可以用where子句处理
【讨论】:
以上是关于按部门划分的前 10 项的主要内容,如果未能解决你的问题,请参考以下文章