如何对另一列的DISTINCT值和GROUP BY日期的值进行求和?

时间:2018-01-27 10:10:37

标签: mysql sql

我们如何仅在同一日期为每个amount发送activity并为每个date输出一行?此查询无效。

SELECT SUM(amount), type, date FROM table GROUP BY DISTINCT date;

表格

+----+------------+-----------+---------+
| id |    date    | activity  | amount  |
+----+------------+-----------+---------+
| 1  | 2017-12-21 | Shopping  | 200     |
| 2  | 2017-12-21 | Gift      | 240     |
| 3  | 2017-12-23 | Give Away | 40      |
| 4  | 2017-12-24 | Shopping  | 150     |
| 5  | 2017-12-25 | Give Away | 120     |
| 6  | 2017-12-25 | Shopping  | 50      |
| 7  | 2017-12-25 | Shopping  | 500     |
+----+------------+-----------+---------+

必填结果

+------------+-----------+------+-----------+
|    date    | Shopping  | Gift | Give Away |
+------------+-----------+------+-----------+
| 2017-12-21 | 200       | 240  |           |
| 2017-12-23 |           |      | 40        |
| 2017-12-24 | 150       |      |           |
| 2017-12-25 | 550       |      | 120       |
+------------+-----------+------+-----------+

3 个答案:

答案 0 :(得分:2)

使用:

select `date`, 
  sum(if (activity='Shopping', amount, null)) as 'Shopping',
  sum(if (activity='Gift', amount, null)) as 'Gift',
  sum(if (activity='Give Away', amount, null)) as 'Give Away'
from table
group by `date`

答案 1 :(得分:0)

你可以试试这个。它会返回您想要的确切结果

SELECT t.date,
    SUM(t.shopping_amount) AS shopping,
    SUM(t.gift_amount) AS gift,
    SUM(t.give_away_amount) AS give_away
FROM
(
    SELECT p.`date`, p.`activity`, p.`amount` AS shopping_amount,
        0 AS gift_amount, 0 AS give_away_amount
    FROM products p
    WHERE p.`activity` = 'Shopping'

    UNION

    SELECT p.`date`, p.`activity`, 0 AS shopping_amount,
        p.amount AS gift_amount, 0 AS give_away_amount
    FROM products p
    WHERE p.`activity` = 'Gift'

    UNION 

    SELECT p.`date`, p.`activity`, 0 AS shopping_amount,
        0 AS gift_amount, p.amount AS give_away_amount
    FROM products p
    WHERE p.`activity` = 'Give Away'
) t
GROUP BY t.date

答案 2 :(得分:0)

嗯,您不能将结果转换为列标题,除非您知道slaasko所展示的所有可能值,但您可以使用sql将结果转换为可以使用您的显示工具旋转的表单(例如切片) BI工具)。

SELECT SUM(amount), activity, date FROM table GROUP BY date, activity;