[英]How to group by multiple rows and column
表如下:
+-------+------+-------+------------+
| user | code | bool | date |
+-------+------+-------+------------+
| user1 | 10 | True | 31/10/2019 |
| user1 | 20 | True | 31/10/2019 |
| user1 | 30 | False | 31/10/2019 |
| user2 | 10 | True | 31/10/2019 |
| user2 | 20 | True | 31/10/2019 |
| user2 | 30 | True | 31/10/2019 |
| user3 | 10 | True | 31/10/2019 |
| user3 | 20 | True | 31/10/2019 |
| user3 | 30 | True | 31/10/2019 |
+-------+------+-------+------------+
輸出 user2 和 user3 是 JOINED,user1 是 NEGECTED
+------------+--------+-----------+
| DATE | JOINED | NEGLECTED |
+------------+--------+-----------+
| 31/10/2019 | 2 | 1 |
+------------+--------+-----------+
我假設列bool
的數據類型為BOOL
,因此您可以在 2 個聚合級別中進行:
select t.date,
sum(total = 3) joined,
sum(total <> 3) neglected
from (
select date, user, sum(bool) total
from tablename
group by date, user
) t
group by t.date
請參閱演示。
結果:
| date | joined | neglected |
| ---------- | ------ | --------- |
| 31/10/2019 | 2 | 1 |
如果列的bool
數據類型是VARCHAR
則更改:
sum(bool) total
到:
sum(bool = 'True') total
我將從一個查詢開始,該查詢將用戶分組並根據代碼計算他們的狀態。 然后,我會用一個聚合查詢來包裝這個查詢,以計算每天加入或忽略的用戶數量:
SELECT `date`,
SUM(`status` = 'joined') AS joined,
SUM(`status` = 'neglected') AS neglected
FROM (SELECT `user`,
`date`,
CASE BIT_AND(bool) WHEN TRUE THEN 'joined' ELSE 'neglected' END AS status
FROM `mytable`
GROUP BY `user`, `date`) t
GROUP BY `date`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.