繁体   English   中英

mysql 1111无效使用组功能

[英]mysql 1111 invalid use of group function

此查询工作正常:

SELECT leads.contact_id, count(leads.contact_id) as orders 
FROM leads
WHERE leads.status="sold" 
GROUP BY leads.contact_id    

但这不是。 为什么?

SELECT leads.contact_id, count(leads.contact_id) as orders
FROM leads
WHERE orders > 1 and leads.status="sold" 
GROUP BY leads.contact_id    

执行此查询时出现错误

1054-“ where子句”中的未知列“ orders”

即使用count(leads.contact_id)替换订单也不起作用:

SELECT leads.contact_id, count(leads.contact_id) as orders
FROM leads
WHERE count(leads.contact_id) > 1 and leads.status="sold" 
GROUP BY leads.contact_id 

返回以下错误消息:

1111-无效使用组功能

如果您了解SQL的操作顺序,您将知道为什么查询不起作用。

FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
ORDER BY clause

SELECTGROUP BY之前先评估WHERE子句。 因此,它将不知道count(leads.contact_id)orderscount(leads.contact_id) HAVING上除后评估GROUP BY 它用于过滤聚合。

SELECT leads.contact_id, count(leads.contact_id) as orders 
FROM leads
WHERE leads.status="sold" 
GROUP BY leads.contact_id  
HAVING orders > 1

我应该使用HAVING而不是WHERE,因为WHERE仅可用于过滤原始数据表,而不能用于过滤计算出的数据表。 但是列数(leads.contact_id)订单是计算列,而不是表的原始列,因此我不得不像这样使用HAVING使其起作用:

SELECT leads.contact_id, count(leads.contact_id) as orders 
FROM leads
WHERE leads.status="sold" 
GROUP BY leads.contact_id  
HAVING orders>1

另请参阅此详细说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM