MySql通过其他列上的不同初始值进行聚合
我有一个表结构如下MySql通过其他列上的不同初始值进行聚合,mysql,sql,Mysql,Sql,我有一个表结构如下 | user_id | value | date | |---------|-------|------------| | 1 | 5 | 2017-09-01 | | 2 | 6 | 2017-09-01 | | 1 | 1 | 2017-09-02 | | 1 | 2 | 2017-09-03 | | 2 | 9 | 2017-09-02 | | 1
| user_id | value | date |
|---------|-------|------------|
| 1 | 5 | 2017-09-01 |
| 2 | 6 | 2017-09-01 |
| 1 | 1 | 2017-09-02 |
| 1 | 2 | 2017-09-03 |
| 2 | 9 | 2017-09-02 |
| 1 | 3 | 2017-09-04 |
| 2 | 5 | 2017-09-04 |
| 2 | 5 | 2017-09-05 |
| 1 | 1 | 2017-09-05 |
| 1 | 5 | 2017-09-06 |
| 1 | 6 | 2017-09-07 |
| 1 | 3 | 2017-09-08 |
| 1 | 4 | 2017-09-09 |
| 2 | 6 | 2017-09-06 |
| 1 | 1 | 2017-09-10 |
我还有一个表,其中给出了用户ID的初始截止日期,如下所示
| user_id | date |
|---------|------------|
| 1 | 2017-09-04 |
| 2 | 2017-09-05 |
所有用户的最终截止日期为2017-09-08
我想获得按用户id聚合的值的总和
我试过的是
SELECT user_id, SUM(value) as Total
FROM table
WHERE date >= $DATE and date <= '2017-09-08'
GROUP BY user_id
假设您有作为用户和截止点的表名。具有每个用户的截止日期的截止日期。试试这个,让我知道它是否有效
select u.user_id,sum(u.value) Total
from users u join cutoff c on u.user_id=c.user_id and (u.date>=c.date and u.date<='2017-09-08')
group by u.user_id
在存在的地方使用
SELECT a.user_id, SUM(a.value) as Total
FROM table1 a
WHERE EXISTS (
SELECT 1
FROM table2 b
WHERE a.user_id = b.user_id
AND a.date >= b.date and a.date <= '2017-09-08'
)
GROUP BY user_id
或者使用条件聚合
SELECT a.user_id,
SUM(CASE WHEN a.date >= b.date and a.date <= '2017-09-08'
THEN a.value
ELSE 0
END) as Total
FROM table1 a
JOIN table2 b ON a.user_id = b.user_id
GROUP BY user_id
相关子查询在MySQL中实现得不是很好,连接几乎总是首选的。在这种情况下不是这样。子查询非常简单。做一个1:M的样本对性能不太有利。预期答案应如问题18、11所述。从这个查询中我得到了23,11@JayChakra我的错,这是表b列的错位,现已更正
SELECT a.user_id, SUM(a.value) as Total
FROM table1 a
WHERE EXISTS (
SELECT 1
FROM table2 b
WHERE a.user_id = b.user_id
AND a.date >= b.date and a.date <= '2017-09-08'
)
GROUP BY user_id
SELECT a.user_id,
SUM(CASE WHEN a.date >= b.date and a.date <= '2017-09-08'
THEN a.value
ELSE 0
END) as Total
FROM table1 a
JOIN table2 b ON a.user_id = b.user_id
GROUP BY user_id