【发布时间】:2014-03-01 06:29:18
【问题描述】:
我正在尝试编写一个查询或一组查询来计算跨越多行的唯一集,但行中的数据可能需要计算多次。
在以下集合中,我想要按年份分组的以下计数
Number of unique SID, Year, Flag1 //2013=2, 2014=2
Number of unique SID, Year, Flag2 //2013=1, 2014=0
Number of unique SID, Year, Flag3 //2013=1, 2014=2
然后我想做同样的事情,按年/月分组
Number of unique SID, Year, Month, Flag1 //2013-Jan=2, 2013-Feb=2, 2013-Mar=1, etc
Number of unique SID, Year, Month, Flag2 //2013-Jan=1, 2013-Feb=1, 2013-Mar=1, etc
Number of unique SID, Year, Month, Flag3, //2013-Jan=1, 2013-Feb=1, 2013-Mar=1, etc
数据集
SID Year Month Flag1 Flag2 Flag3
--------------------------------------------------
1 2013 Jan Y Y Y
1 2013 Feb Y Y Y
1 2013 Mar Y Y Y
1 2014 Jan Y Y
1 2014 Feb Y
2 2013 Jan Y
2 2013 Feb Y
2 2014 Jan Y Y
2 2014 Feb Y Y
我可以对每个计数使用一个查询来做到这一点,但我真的很想将它合并到一个查询中。
我今年的多次统计如下:
select count(*) from
( select distinct SID, Year, Flag1 from Table WHERE Year = '2013' ) as 2013Flag1
select count(*) from
( select distinct SID, Year, Flag2 from Table WHERE Year = '2013' ) as 2013Flag2
select count(*) from
( select distinct SID, Year, Flag1 from Table WHERE Year = '2014' ) as 2014Flag1
等等……
月份计数如下所示:
select count(*) from
( select distinct SID, Year, Month, Flag1 from Table WHERE Year = '2013' and Month = 'Jan' ) as 2013JanFlag1
等等……
查询每个计数是否更容易做到这一点,还是我可以选择某种类型的笛卡尔积?任何想法都会很棒。这来自 Oracle 数据库。我相信它是10g版本。
【问题讨论】:
-
试试
select year, count(distinct sid) from tableName group by year。