簡體   English   中英

如何對另一個列的DISTINCT值和GROUP BY日期的值求和?

[英]How to SUM values for DISTINCT values of another column and GROUP BY date?

如何僅在同一日期為每個activity總計amount ,並為每個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       |
+------------+-----------+------+-----------+

采用:

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`

你可以試試看 它返回您想要的確切結果

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

嗯,除非知道slaasko演示的所有可能的值,否則您不能將結果轉換為列標題,但是可以使用sql將結果轉換為可以使用顯示工具(例如BI工具切片)旋轉的形式。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM