[英]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.