如何在MySQL中将多个查询合并为一个查询
假设我有一个名为“productClick”的表,如下所示:如何在MySQL中将多个查询合并为一个查询,mysql,Mysql,假设我有一个名为“productClick”的表,如下所示: ----id------click-------------ctime---------- | 1 | 5 | 2015-12-26 00:01:12 | --------------------------------------------- | 2 | 2 | 2015-12-27 00:01:12 | -----------------------------------
----id------click-------------ctime----------
| 1 | 5 | 2015-12-26 00:01:12 |
---------------------------------------------
| 2 | 2 | 2015-12-27 00:01:12 |
---------------------------------------------
| 3 | 7 | 2015-12-28 00:01:12 |
---------------------------------------------
| 4 | 1 | 2015-12-28 00:01:12 |
---------------------------------------------
SELECT COUNT(*) as totalProduct FROM productClick
SELECT COUNT(*) as todayTotalProductAdded FROM productClick WHERE DATE(`ctime`) = CURDATE()
SELECT sum(click) as totalClick FROM productClick
我想获得产品总数,今天添加的产品总数和总点击量之和
我有三个类似这样的问题:
----id------click-------------ctime----------
| 1 | 5 | 2015-12-26 00:01:12 |
---------------------------------------------
| 2 | 2 | 2015-12-27 00:01:12 |
---------------------------------------------
| 3 | 7 | 2015-12-28 00:01:12 |
---------------------------------------------
| 4 | 1 | 2015-12-28 00:01:12 |
---------------------------------------------
SELECT COUNT(*) as totalProduct FROM productClick
SELECT COUNT(*) as todayTotalProductAdded FROM productClick WHERE DATE(`ctime`) = CURDATE()
SELECT sum(click) as totalClick FROM productClick
它很好用。但我想将这三个单独的查询合并为一个查询。如何做到这一点
更新
问题已更新。对不起我的错。感谢Gordon Linoff,您可以使用条件聚合:
SELECT COUNT(*) as totalProduct,
SUM(click) as totalClick,
SUM(DATE(ctime) = CURDATE()) as todayClick
FROM productClick
today单击
是以下内容的简写:
SUM(CASE WHEN DATE(ctime) = CURDATE() THEN 1 ELSE 0 END) as todayClick
或者,如果需要多行,则使用“联合所有”:
SELECT 'totalProduct' AS counter_name, COUNT(*) AS counter_value FROM productClick
UNION ALL
SELECT 'todayClick', COUNT(*) FROM productClick WHERE DATE(ctime) = CURDATE()
UNION ALL
SELECT 'totalClick', SUM(click) FROM productClick
编辑:
今天添加的产品总数和点击总数
今天点击是否真的是计数(*)?不应该是
SUM(单击)
?工作正常。谢谢但是你能给我解释一下这行总和(DATE(ctime)=CURDATE())吗?@AshisBiswas当DATE(ctime)=CURDATE()时,你得到的是真还是假。求和时,false由0表示,true由1表示。最后是1和0的相加。非常感谢。明白了。:)我认为在sql命令中使用联合更具可读性。例如,使用sum、count中的布尔条件,它仅在为真时求和或计数。当0(0)是一个“值”。Null将被正确处理,就像在每个查询中一样。第一个查询是COUNT(*)与OP相同,SUM(click)与OP相同,与todayClick相同。看,我写了布尔条件作为速记。如果需要不同的值或列,请在
时使用fullCASE。在多列上使用UNION取决于需求。对于计数器,我喜欢有多个值的一行,但总是要视情况而定。