【问题标题】:Join SQL table to divide one column into 3 columns with sum [duplicate]加入 SQL 表以将一列分为 3 列,总和 [重复]
【发布时间】:2021-03-08 21:28:12
【问题描述】:

表“dsi”目前分为 4 列。

id | dsi | amount | month  
2  | debt| -23.39 | 02  
2  | debt| -27.32 | 02  
2  | sav |  23.39 | 03  
2  | inv | 101.39 | 04  
2  | sav |  23.39 | 04  
2  | debt| -42.42 | 04  
2  | sav | 123.39 | 03  
2  | inv |  23.39 | 03  
2  | sav | 231.39 | 04  
2  | inv | 234.39 | 04  

我想按用户(id 列)、月份以及每月的债务、储蓄和投资总额查询该表。理想情况下,它看起来像这样:

month |  debt  |  sav  |  inv  |  
02    | -50.71 |       |       |  
03    |        | 146.78| 23.39 |  
04    | -42.42 | 231.39|234.39 | 

我尝试了很多不同的 MySQL 查询,包括内部连接,但我没有找到正确的方法。查询这个的正确方法是什么?

这是我最近的尝试:

cursor.execute("""SELECT a.month, debt, savings, investment   
        FROM dsi a INNER JOIN dsi b   
        ON a.month   
        ON a.dsi=d.dsi    
        GROUP BY a.month   
        SUM(amount) AS debt WHERE (dsi = %s) AND (id = %s) GROUP BY month""", ("debt", id))
data = cursor.fetchall()

【问题讨论】:

  • 考虑处理应用代码中数据显示的问题

标签: mysql sql inner-join


【解决方案1】:

你只是想要条件聚合吗?

select month,
       sum(case when dsi = 'debt' then amount end) as debt,
       sum(case when dsi = 'sav' then amount end) as sav,
       sum(case when dsi = 'inv' then amount end) as inv
from dsi
group by month

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 2020-09-06
    • 2011-03-04
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多