Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中将多个查询合并为一个查询_Mysql - Fatal编程技术网

如何在MySQL中将多个查询合并为一个查询

如何在MySQL中将多个查询合并为一个查询,mysql,Mysql,假设我有一个名为“productClick”的表,如下所示: ----id------click-------------ctime---------- | 1 | 5 | 2015-12-26 00:01:12 | --------------------------------------------- | 2 | 2 | 2015-12-27 00:01:12 | -----------------------------------

假设我有一个名为“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
我想获得产品总数,今天添加的产品总数和总点击量之和

我有三个类似这样的问题:

----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相同。看,我写了布尔条件作为速记。如果需要不同的值或列,请在
时使用full
CASE。在多列上使用UNION取决于需求。对于计数器,我喜欢有多个值的一行,但总是要视情况而定。