[英]MySQL query the same table with two date fields and group by same ID
[英]Two group in the same Query Mysql
您的查詢是無效的 SQL。 MySQL讓我們通過這個滑動並選擇每天和任意選擇的當天用戶之一的值的總和。
您所要求的,即在一行中顯示所有用戶的所有總數,無法在 SQL 中完成。 在 SQL 查詢中,您始終選擇之前已知的列。 由於一天可以有一個用戶、兩個用戶或一萬個用戶,因此我們顯然事先並不知道所有的列。
您寧願選擇行:
SELECT sum(value) as total, id_user, data
FROM os
GROUP by data, id_user
ORDER by data, id_user;
或者選擇連接的字符串,例如:
SELECT
group_concat(concat(id_user, ': ', total) order by id_user separator ', ') as totals,
data
FROM
(
SELECT sum(value) as total, id_user, data
FROM os
GROUP by data, id_user
) sums
ORDER by data;
如果我們可以假設:(但很可能我不明白這個問題)
那么以下應該工作:
SELECT D.ID_USER, D.Total as Total, C.ID_USER, C.Total as Total_1, c.data
FROM (SELECT A.*, @RN:=@RN+1 RN
FROM OS A
CROSS JOIN (SELECT @RN:=0) X
ORDER BY Data, ID_USER) C
INNER JOIN (SELECT B.*, @RN2:=@RN2+1 RN
FROM OS B
CROSS JOIN (SELECT @RN2:=0) X
ORDER BY Data, ID_USER) D
on C.RN+1=D.RN
and C.Data=D.Data
WHERE mod(C.RN,2)=1;
給我們:
+----+---------+-------+---------+---------+---------------------+
| | ID_USER | Total | ID_USER | Total_1 | data |
+----+---------+-------+---------+---------+---------------------+
| 1 | 9 | 4,00 | 5 | 3,25 | 19.02.2018 00:00:00 |
| 2 | 9 | 1,50 | 5 | 1,00 | 20.02.2018 00:00:00 |
| 3 | 9 | 1,00 | 5 | 0,25 | 21.02.2018 00:00:00 |
+----+---------+-------+---------+---------+---------------------+
現在,如果給定數據可以有多個用戶; 在這種情況下,我需要了解您想要的結果。 我們總是有成對的嗎? 因此,如果有 3 個 ID_user 和 total 在具有相同數據的第二行上應該是空白的? (如果是這樣,只需將內連接更改為左連接)是否應該為每個用戶添加 2 個額外的列,一個用於 ID_user,一個用於總計? (如果是這樣,我們現在在 mySQL 中有一個動態交叉表查詢,它可以完成,但需要更多的編碼。
通過向您的問題添加額外的示例數據並模擬此類數據的預期結果,以圖形方式說明此類邊緣情況。 這可以通過編輯我提供的 reextester 示例或增強您的圖形插圖來完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.