簡體   English   中英

兩組同查詢Mysql

[英]Two group in the same Query Mysql

我有一個表(服務),其中包含執行者的 ID 以及服務的價值和完成日期。 我需要在同一行上按日期和 ID 添加服務的值。 這是可能的?

SELECT sum(value) as total, id_user, data FROM os GROUP by data

預期的:

圖片

圖片

您的查詢是無效的 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;

如果我們可以假設:(但很可能我不明白這個問題)

  • 每個數據總是只有兩個 user_ID
  • 較高的 user_ID 應始終與較低的 userID 一起出現在 ID_User 列中...

那么以下應該工作:

  • 生成兩個我們可以連接在一起的相同數據集(下面的 C、D)
  • 在每個數據集中為有序序列分配相同的行號,在這種情況下,我們按數據和 ID_User 排序
  • 現在在生成的 RN+1 和 RN 上加入這些數據集,以便集 C 的第 1 行與集 D 的第 2 行相關聯
  • 現在限制集合 C 只包含奇數行,因此集合 D 將只包含偶數行。 如果假設為真,並且每個數據只有 2 個用戶,那么我們將獲得所需的結果。

Rextester 上的工作演示

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.

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