我不確定如何構建SQL查詢以返回列的數量等於某些值的行數。sql受限計數查詢
例如,
在表myTable
,我怎麼能返回所有的行,其中myColumn = "xyz"
並在myColumn = "abc"
的計數?這可能與一個單一的查詢?
爲了澄清,說有10行,其中myColumn = "xyx"
和7行,其中myColumn = "abc"
,查詢將返回類似:
firstCountResult: 10
secondCountResult: 7
我不確定如何構建SQL查詢以返回列的數量等於某些值的行數。sql受限計數查詢
例如,
在表myTable
,我怎麼能返回所有的行,其中myColumn = "xyz"
並在myColumn = "abc"
的計數?這可能與一個單一的查詢?
爲了澄清,說有10行,其中myColumn = "xyx"
和7行,其中myColumn = "abc"
,查詢將返回類似:
firstCountResult: 10
secondCountResult: 7
怎麼樣?:
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
你要組由mycolumn計數,所以你這樣做
select
myColumn, count(*)
from
myTable
where
myColumn in ('xyz','abc')
group by
myColumn
永遠不會做COUNT(*),(在非空使用索引列)數(1)或算比較好。 – stjohnroe 2010-12-20 23:19:47
嗯。 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
@ stjohnroe,count(*)與count(1)相同。 – 2010-12-21 04:32:21