如何在SQL查询中返回count和not count?
如果我有桌子如何在SQL查询中返回count和not count?,sql,oracle,select,Sql,Oracle,Select,如果我有桌子 AgentID | IsNew | TeamID 1 N 1 2 Y 2 3 Y 2 4 N 2 5 Y 1 我想从查询中返回以下内容: Team | CountIsNew = N | CountIsNew = Y 1 1 1 2 1 2 我有办法做到这一点吗?
AgentID | IsNew | TeamID
1 N 1
2 Y 2
3 Y 2
4 N 2
5 Y 1
我想从查询中返回以下内容:
Team | CountIsNew = N | CountIsNew = Y
1 1 1
2 1 2
我有办法做到这一点吗?使用Oracle 10还有另一种方法-COUNT不计算空值(除了
COUNT(*)
):
SELECT team, SUM(DECODE(IsNew, 'N', 1, 0)), SUM(DECODE(IsNew, 'Y', 1, 0))
FROM mytable
GROUP BY
team
或者,如果您喜欢这种情况:
SELECT TeamId,
COUNT(CASE IsNew WHEN 'N' THEN 1 END) CountIsNotNew,
COUNT(CASE IsNew WHEN 'Y' THEN 1 END) CountIsNew
FROM Agent
GROUP BY TeamId;
(注意:“1”可以是任何文字值)5/5-干杯。我去看看decode,看看它是怎么工作的@OMGPonies:对于这种分组查询,我更喜欢
解码
,因为它是空的
感知的DECODE(NULL,NULL,1,0)
返回1
,如果为NULL,则大小写为NULL,然后返回0
。您可以将NULL
替换为任何其他常规值。我说DECODE是oracle特有的,而Dirk的答案适用于任何数据库,这对吗?
SELECT TeamId,
COUNT(DECODE(IsNew,'N',1)) CountIsNotNew,
COUNT(DECODE(IsNew,'Y',1)) CountIsNew
FROM Agent
GROUP BY TeamId;
SELECT TeamId,
COUNT(CASE IsNew WHEN 'N' THEN 1 END) CountIsNotNew,
COUNT(CASE IsNew WHEN 'Y' THEN 1 END) CountIsNew
FROM Agent
GROUP BY TeamId;