簡體   English   中英

SQL - 根據條件進行分組和求和的更好方法

[英]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種方法,想看看有沒有更好的方法。

  1. 使用聯盟
Select Year, sum(Amount) from TABLE_A 
where Year <= 2020
UNION
Select Year, sum(Amount) from TABLE_A 
where Year > 2020
  1. 添加了一個新列
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM