我不确定如何构建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