2010-12-20 59 views
3

我不確定如何構建SQL查詢以返回列的數量等於某些值的行數。sql受限計數查詢

例如,

在表myTable,我怎麼能返回所有的行,其中myColumn = "xyz"並在myColumn = "abc"的計數?這可能與一個單一的查詢?

爲了澄清,說有10行,其中myColumn = "xyx"和7行,其中myColumn = "abc",查詢將返回類似:

firstCountResult: 10 
secondCountResult: 7 

回答

3

怎麼樣?:

SELECT 
    COUNT(*), 
    myColumn 
FROM myTable 
WHERE myColumn IN ('xyz', 'abc') 
GROUP BY myColumn 

這種方法也適用與其他集合函數,如MIN,MAX,AVG,SUM ...您可以獲得每個分組列的值與所有行之間的聚合結果。

--min myDate per myColumn value 
SELECT 
    MIN(myDate), 
    myColumn 
FROM myTable 
WHERE myColumn IN ('xyz', 'abc') 
GROUP BY myColumn 

--sum of myNumericCol per myColumn value 
SELECT 
    SUM(myNumericCol), 
    myColumn 
FROM myTable 
WHERE myColumn IN ('xyz', 'abc') 
GROUP BY myColumn 
+0

永遠不會做COUNT(*),(在非空使用索引列)數(1)或算比較好。 – stjohnroe 2010-12-20 23:19:47

+0

嗯。 count(*)和count(1)之間的區別可能不是您所期望的:[詢問Tom討論](http://asktom.oracle.com/pls/asktom/f?p=100:11:0 :: :: P11_QUESTION_ID:1156151916789),[oracledba.co.uk](http://www.oracledba.co.uk/tips/count_speed.htm)。我想一個非空索引列可能是有道理的,但我沒有一個可用。 – 2010-12-20 23:43:53

+0

@ stjohnroe,count(*)與count(1)相同。 – 2010-12-21 04:32:21

2

你要組由mycolumn計數,所以你這樣做

select 
     myColumn, count(*) 
from 
     myTable 
where 
     myColumn in ('xyz','abc') 
group by 
     myColumn