从同一查询生成多个总和

时间:2013-06-05 07:00:15

标签: mysql join inner-join right-join

我有一张这样的表:

id   person_id  total amount    date_time
1    101        2000            2001-12-10
2    102        1000            2001-12-10
3    102        3000            2001-12-10
4    102        2000            2001-12-10
5    103        1000            2001-12-11
6    101        1000            2001-12-11
7    102        3000            2001-12-11
8    102        4000            2001-12-11
9    102        4000            2001-12-11

我希望输出类似于2001-12-11日期的输出

person_101   person_102   person_103
1000         11000         1000

我已尝试使用SUM()功能,但我坚持使用WHEREJOIN条款。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

SELECT
  SUM(CASE WHEN person_id = 101 THEN total_amount ELSE 0 END) as person_101,
  SUM(CASE WHEN person_id = 102 THEN total_amount ELSE 0 END) as person_102,
  SUM(CASE WHEN person_id = 103 THEN total_amount ELSE 0 END) as person_103
FROM
  my_table
WHERE
  date_time ='2001-12-11'

答案 1 :(得分:0)

您需要透视数据,遗憾的是,这在mysql中不是动态的,请尝试以下操作:

SELECT
    SUM(IF(person_id = 101,total_amount,0)) as person_101,
    SUM(IF(person_id = 102,total_amount,0)) as person_102,
    SUM(IF(person_id = 103,total_amount,0)) as person_103
FROM
    my_table
WHERE
    date_time = '2001-12-11'

此外,您可以按日期执行此分段,只需将其放在字段列表中并按其分组:

SELECT
    date_time,
    SUM(IF(person_id = 101,total_amount,0)) as person_101,
    SUM(IF(person_id = 102,total_amount,0)) as person_102,
    SUM(IF(person_id = 103,total_amount,0)) as person_103
FROM
    my_table
GROUP BY
    date_time