2013-05-08 127 views
3

我有這個疑問,從一張桌子和行數的查詢會返回取行:查詢選擇COUNT(*)和列

SELECT tab.*, 
     (SELECT Count(*) 
     FROM mytable mtb 
     WHERE mtb.name = 'XYZ' 
       AND mtb.TYPE = 'TP') 
FROM mytable tab 
WHERE tab.name = 'XYZ' 
     AND tab.TYPE = 'TP' 

現在,如果你看到了,我只是想主查詢返回所有其他列的行數。我需要在非常大的查詢中將此查詢用作子查詢。現在我想知道是否有更好的方法來寫這個查詢。我的意思是我們重複查詢只是爲了分開計數。所以,可以請你提供更優化的形式

回答

7

您應該使用解析函數count()

select tab.*, count(*) over() as totalcnt 
from mytable tab 
where tab.name = 'XYZ' and tab.type = 'TP' 
+0

是不是COUNT(*)OVER()一樣普通COUNT(*)? – kyooryu 2013-05-08 13:20:15

+3

@kyooryu:不,它不是。帶有附加列的「普通」計數需要在這些列上有一個「GROUP BY」。 – 2013-05-08 13:22:04

+0

實際上,經過一些測試後,我發現我真正需要的是'count(*)over(按名稱分區,類型)'!非常感謝幫助我學習新的命令:) – MozenRath 2013-05-09 09:33:43