在where子句中使用别名 - SQL

时间:2015-08-08 09:53:17

标签: mysql sql-server

我有一个Summary表(data_summary)和一个Summary Details表(data_summary_dtl)。我在data_summary_dtl表中应用以下查询来获取

  

摘要中每条记录的详细信息表中的记录数   表,如果count大于2,则选择数据

select summary_gid,COUNT(summary_gid) as varCount 
from data_summary_dtl 
group by summary_gid; 

我可以使用以下查询

列出summary_id和计数

这给了我很好的结果,现在我的问题是如何获得计数大于2的记录的结果。

我曾尝试以下方法,但没有按预期得到结果:

select summary_gid,COUNT(summary_gid) as varCount
from data_summary_dtl
where varCount > 2 
group by summary_gid; 

select summary_gid,COUNT(summary_gid) as varCount 
from data_summary_dtl
where COUNT(summary_gid) > 2
group by summary_gid; 

还有其他可能获得结果吗?

2 个答案:

答案 0 :(得分:2)

请使用此查询

select summary_gid,COUNT(summary_gid) as varCount 
from  data_summary_dtl 
group by summary_gid
having COUNT(summary_gid)> 2 

Having在应用GROUP BY后限制选择列表,并在查询语法中使用后再使用。 在WHERE之前使用GROUP BY并在GROUP BY中进行分组之前限制选择列表,因此依赖COUNT()的{​​{1}}等汇总函数不会产生结果< / p>

关于您的疑问:

GROUP BY

这里的错误是

  

列名称varCount

无效

因为您无法使用select summary_gid,COUNT(summary_gid) as varCount from data_summary_dtl where varCount > 2 group by summary_gid; SELECTWHEREGROUP BY条件中ORDER列表中定义的别名。

在第二个查询中

HAVING

您将收到有关

的错误消息
  

select summary_gid,COUNT(summary_gid) as varCount from data_summary_dtl where COUNT(summary_gid) > 2 group by summary_gid; 子句

中使用聚合函数COUNT

请注意,在WHERE语法中使用WHERE是完全可以的。例如,如果您想查看有关大于10且小于15的GROUP BY的详细信息,那么您可以使用

summary_gid

你也可以使用select summary_gid,COUNT(summary_gid) as varCount from data_summary_dtl where summary_gid > 10 AND summary_gid > 20 group by summary_gid; WHERE HAVING这样

GROUP BY

答案 1 :(得分:0)

使用having子句和group by

select summary_gid,COUNT(summary_gid) as varCount 
from  data_summary_dtl 
group by summary_gid
having COUNT(summary_gid) > 2 

我们不能将WHERE与聚合函数一起使用。那是HAVING条款来帮助的时候。