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

【背景】

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

分公司收益年份
a1002022
b2002022
c3002022
a4002021
b5002021
c6002021

想要变化为:

分公司2022收益2021收益
a100400
b200500
c300600

笨办法是分别通过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
    分公司;

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

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日出拳老爷子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值