按部门划分的前 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 项的主要内容,如果未能解决你的问题,请参考以下文章

城市社区的划分方法

快速子网划分

BZOJ1263 [SCOI2006]整数划分

企业级vlsm划分实战

数据仓库建设之确定主题域

ensp 谋企业部门ip地址划分,拓扑图