【sql】【mysql】【数据库】复杂查询中避免Join的办法

【背景】

很多场景下,需要将长表根据不同的搜索条件GroupBy之后变成横向的短表,例如:

分公司 收益 年份
a 100 2022
b 200 2022
c 300 2022
a 400 2021
b 500 2021
c 600 2021

想要变化为:

分公司 2022收益 2021收益
a 100 400
b 200 500
c 300 600

笨办法是分别通过where 年份=2021和where 年份=2022并以分公司groupby后获得相同结构的列,然后以分公司为条件进行join。这种写法的问题在于有几列就要写几个相同结构的子查询,然后将所有列Join,非常繁杂且难于维护。

【更简洁的写法】

用case when配合sum:

SELECT
    分公司,
    SUM(CASE WHEN YEAR(年份) = 2022 THEN 收益 END) AS 2022收益,
    SUM(CASE WHEN YEAR(年份) = 2021 THEN 收益 END) AS 2021收益
FROM
    transactions
GROUP BY
    分公司;

一个查询就可以搞定,而且非常便于维护。

你可能感兴趣的:(database,sql,mysql,数据库)