提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
此查询工作正常:
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
在SELECT
和GROUP BY
之前先评估WHERE
子句。 因此,它将不知道count(leads.contact_id)
或orders
是count(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.