我有一张这样的桌子
idOne | date | input
------------------
1 | 2015-01-01 | 423
2 | 2015-01-01 | 342
1 | 2015-01-02 | 343
2 | 2015-01-02 | 332
在这张桌子上我会:
SELECT date, SUM(input)
FROM data
WHERE date BETWEEN "2015-01-01" AND "2015-01-02"
GROUP BY date
这给了我这个输出:
date | input
------------------
2015-01-01 | 765
2015-01-02 | 675
我的数据库中还有一个表,
data
:idTwo | idOne | label
------------------
1 | 1 | 'Hello, '
2 | 2 | 'World!'
3 | 1 | 'Hello, '
4 | 2 | 'World!'
正如您所看到的,这个数据库并没有完全规范化,但这就是我所拥有的。
我想按
info
-语句中label
的值进行筛选。这让我头疼!每次尝试时,我的行都被求和多次。例如:SELECT date, SUM(input)
FROM data, info
WHERE date BETWEEN "2015-01-01" AND "2015-01-02"
AND data.idOne = info.idOne
AND label = 'Hello,'
GROUP BY date
对每件事求两次和,得到这个结果:
date | input
------------------
2015-01-01 | 1530
2015-01-02 | 1350
我该怎么解决?谢谢。
最佳答案
如果您想要第一个表中的精确和,那么您可能需要exists
:
SELECT date, SUM(input)
FROM data d
WHERE date BETWEEN '2015-01-01' AND '2015-01-02' AND
EXISTS (SELECT 1 FROM info i WHERE d.idOne = i.idOne AND i.label = 'Hello,')
GROUP BY date;
您还应该学习使用显式
join
语法。简单规则:不要在FROM
子句中使用逗号。关于mysql - MySQL:仅在单行上加入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30262691/