Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 选择一个值,其中包含一个SUM()_Mysql_Sql - Fatal编程技术网

Mysql 选择一个值,其中包含一个SUM()

Mysql 选择一个值,其中包含一个SUM(),mysql,sql,Mysql,Sql,我这里有我的疑问 SELECT o.id, SUM(t.num) AS num FROM table_1 o LEFT JOIN table_2 t ON t.id = o.id WHERE num >= 2 GROUP BY o.id ORDER BY num DESC 我应该只在SUM(t.num)>=2的情况下选择o.id,但是SQLFIDLE中的结果是完全错误的: 我只想选择记录其中num>=2和按num desc排序,我甚至不需要选择SUM(t.num),所以尝试删除它并用SU

我这里有我的疑问

SELECT o.id, SUM(t.num) AS num
FROM table_1 o
LEFT JOIN table_2 t ON t.id = o.id
WHERE num >= 2
GROUP BY o.id
ORDER BY num DESC
我应该只在
SUM(t.num)>=2的情况下选择
o.id
,但是SQLFIDLE中的结果是完全错误的:

我只想选择记录
其中num>=2
按num desc排序
,我甚至不需要选择
SUM(t.num)
,所以尝试删除它并用
SUM(t.num)
替换每个
num
,但得到了
组函数的无效使用


我的目标是使用
WHERE
而不是
have
,它以前使用
have
,但我想使用
WHERE
,因为它更快。

您可以使用如下子查询:

SELECT * FROM 
(SELECT o.id, SUM(t.num) num FROM table_1 o
LEFT JOIN table_2 t
ON t.id = o.id
GROUP BY o.id) T 
WHERE num >= 2

在子查询之外使用
WHERE
子句

提示:
HAVING
WHERE
在聚合之前处理,
HAVING
之后处理,因此不同的速度并不重要,因为结果也不同:-)@dnoeth不可能,
JOIN
结果发生在聚合之后还是之前?这就是为什么我只能使用
HAVING
?“以前使用
HAVING
,但我想使用
WHERE
,因为它更快。”
WHERE
更快,因为它需要做的工作更少,但得到的结果不正确。如果希望得到正确的结果,请切换回
HAVING
。查询按以下逻辑顺序处理:FROM/JOIN->WHERE->GROUP BY->HAVING->SELECT->order BY