【问题标题】:How can one group by ranges and perform aggregation in mysql?如何在mysql中按范围分组并执行聚合?
【发布时间】:2021-06-23 09:52:08
【问题描述】:

我有一个如下所示的表格,其中包含年份和每年销售的商品数量,我想将年份列分组为十年的范围,并对每个十年的销售数量求和。考虑到第一个十年是 1980 - 1989 年,第二个十年是 1981 - 1990 年,依此类推......预期结果也显示在下面的第二个表格中

sample:                           expected_result:

+------+----------+               +-----------+------------+
| year |   qty    |               |  Decades  | Total_qnty |
+------+----------+               +-----------+------------+
| 1980 |        2 |               | 1980-1989 |         13 |
| 1981 |        1 |               | 1981-1990 |         12 |
| 1983 |        8 |               | 1982-1991 |         12 |
| 1989 |        2 |               | 1983-1992 |         12 |
| 1990 |        1 |               | .         |         .  |
| 1992 |        1 |               | .         |         .  |
| 1994 |        4 |               | .         |         .  |
+------+----------+               +-----------+------------+

以下是我与其他几个人一起尝试过的示例代码,但结果与预期不符,

SELECT t.range AS Decades, SUM(t.qty) as Total_qnty
FROM (
    SELECT case
        when s.Year between 1980 and 1989 then '1980 - 1989'
        when s.Year between 1981 and 1990 then '1981 - 1990'
        when s.Year between 1982 and 1991 then '1982 - 1991'
        when s.Year between 1983 and 1992 then '1983 - 1992'
        else '1993 - above'
        end as range, s.qty
    FROM sample s) t,

group by t.range

我尝试了thisthis,但仍然无法获得预期的结果。我也不想硬编码东西。请任何帮助将不胜感激。

【问题讨论】:

  • 请确认预期结果。第三个十年应该是“1982-1991”,第四个十年应该是“1983 - 1992”吗?
  • @Samir 是的,请,上面的预期结果表中有错误。如您所说,第 3 和第 4 个十年应该是 '1982 - 1991' 和 '1983 - 1992'。

标签: mysql group-by sum range


【解决方案1】:

xObert's answer to hank99's question 获得见解后,我能够解决自加入问题,如下所示。 注意:原始表包含产品名称和销售年份,重复的产品名称和销售年份。这就解释了为什么我能够使用 COUNT(*) 来获得每十年销售的产品总数。谢谢大家!

SELECT year1 ||' - '|| year2 AS Decades, Count_of_qnty
FROM
    (SELECT s1.year year1, s1.year+9 year2, COUNT(*) AS Count_of_qnty
    FROM 
        (SELECT DISTINCT year FROM sample) s1
    JOIN sample s2
         ON s2.year>=year1 AND s2.year <= year2
    GROUP BY year1)

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2020-12-19
    • 2016-11-24
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多