2010-12-20 98 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