[英]SQL - better way to group and sum based on condition
我有這樣的數據:
年 | 數量 |
---|---|
2001年 | 1個 |
2020 | 2個 |
2020 | 2個 |
2021年 | 5個 |
2022年 | 2個 |
2022年 | 2個 |
2021年 | 2個 |
我想總結如下數據:
年 | 數量 |
---|---|
2020年及之前 | 5個 |
2021年 | 7 |
2022年 | 4個 |
想到了2種方法,想看看有沒有更好的方法。
Select Year, sum(Amount) from TABLE_A
where Year <= 2020
UNION
Select Year, sum(Amount) from TABLE_A
where Year > 2020
SELECT YR, SUM(Amount) FROM
(
SELECT CASE WHEN Year <= 2020 THEN '2020_and_before') ELSE Year END as YR, *
FROM TABLE_A ) A
GROUP BY YR
可以得到我想要的結果,但是想看看有沒有更好的方法
在 MySQL 中,可以通過以下方式避免帶有CASE
表達式的子查詢:
SELECT CASE WHEN Year_ <= 2020 THEN "2020 or before"
ELSE Year_ END AS Year_ ,
SUM(Amount) AS total_amount
FROM tab
GROUP BY 1
Output:
年_ | 總金額 |
---|---|
2020年或之前 | 5個 |
2021年 | 7 |
2022年 | 4個 |
在此處查看 MySQL 演示。
注意:您應該避免混淆數據類型。 如果您應該在年份字段中存儲年份,則可以保留 integer 2020,而不是像“2020 或之前”這樣的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.