我做了个sql语句:
Select
p.rfid, sum(d.intake) as amount
from pig_basic p left join daily_food_intake d
on p.rfid=d.rfid
group by p.rfid
order by p.rowid
where amount =0
执行到where出错,去掉where语句则出现正确结果,请问错在哪里?怎么改
这涉及where、group by 、having、order by这四个命令的先后顺序,必须以这样的顺序去写!
你的命令应该这样写:
注意:having 是不能用别名的~,order by 可以。
Select p.rfid, sum(d.intake) as amount
from pig_basic p
left join daily_food_intake d
on p.rfid=d.rfid
group by p.rfid
having sum(d.intake) =0
order by p.rowid
Select
p.rfid, sum(d.intake) as amount
from pig_basic p left join daily_food_intake d
on p.rfid=d.rfid
group by p.rfid
order by p.rowid
having amount =0;
WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚合计算), 而 HAVING 在分组和聚合之后选取分组的行。因此,WHERE 子句不能包含聚集函数.
having就是来弥补where在分组数据判断时的不足。因为where执行优先级别要快于聚合语句
你应该查一下 having 和 where 的区别 什么时候改用having 什么时候 改用 where group by 是个 having 连用的
还有当你后面的条件涉及到一些函数时,也应该用having 而不是 where