2015-08-08 90 views
0

我有一個Summary表(data_summary)和一個Summary Details表(data_summary_dtl)。我申請了下面的查詢中data_summary_dtl表獲得的詳細表中的記錄在彙總表 每條記錄​​的在where子句中使用別名 - SQL

號碼,選擇數據如果計數大於2

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

我可以使用以下查詢列出summary_id以及計數,

對我而言,這給了我很好的結果,現在我的問題是如何獲得計數大於的記錄的結果。

我曾試圖以下,但預期不會得到結果:

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

請使用查詢

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

Having應用GROUP BY後限制了選擇列表和查詢語法後使用。 WHEREGROUP BY之前使用和GROUP BY分組之前限制了選擇列表,讓你像COUNT()聚合函數依賴於GROUP BY不見效

關於您的疑問:

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

在這裏的錯誤是

無效的列名varCount

,因爲您無法使用在WHEREGROUP BY,ORDERHAVING條件中的SELECT列表中定義的別名。

在第二個查詢

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

您將收到有關

使用聚合函數COUNTWHERE條款

請注意,也完全可以在GROUP BY使用WHERE錯誤句法。例如,如果你想看到的細節有關summary_gid這比10和小於15時則可以使用

select summary_gid,COUNT(summary_gid) as varCount from data_summary_dtl 
where summary_gid > 10 AND summary_gid > 20 group by summary_gid; 

您還可以使用WHEREHAVING都與GROUP BY這樣

select summary_gid,COUNT(summary_gid) as varCount from data_summary_dtl 
where summary_gid > 10 AND summary_gid > 20 group by summary_gid 
having COUNT(summary_gid)>1 ; 
+0

@ DhruvJoshi:很好的答案,如預期般運作良好。謝謝 –

+0

@非幸運謝謝!我希望你也能理解group by where子句中where子句的作用,僅用於在分組之前對錶進行過濾。 – DhruvJoshi

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條款來幫助。

+0

無效列名稱'varCount'。 –