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