SQL多个组,由第一组聚合

时间:2017-11-15 13:12:11

标签: sql sql-server group-by aggregate-functions

我目前已经编写了这样的SQL查询:

SELECT   a, b, count(id) / ????
FROM     X
group by a, b

请注意上面代码中的 ????? group by中有两个组。即列ab

我打算将第二组(b)中的(1)项数除以(2)计数第一组中的项目(a)。

count(id)完成(1)。但我不知道该写些什么(2)。

P.S。:但我知道有可能取代“????”与另一个复杂的选择查询,但我想知道是否有更简单的方法来aggregate第一组的项目。

更新: 样本数据:

id       a           b
______________________
1       'A'         'G'
2       'A'         'H'
3       'A'         'H'
4       'B'         'G'
5       'B'         'G'
6       'B'         'K'
7       'B'         'K'

结果:

a           b          [unnamed]
________________________________
'A'         'G'        0.33333
'A'         'H'        0.66667
'B'         'G'        0.5
'B'         'K'        0.5

第三列是列中b的值相对于列a中的值的列的百分比。

谢谢。

2 个答案:

答案 0 :(得分:2)

如果您使用SQL Server

,这可能有效
SELECT  DISTINCT  a, b, (COUNT(*)OVER(PARTITION BY a, b)* 1.0/COUNT(*)OVER(PARTITION BY a)) as unnamed
FROM Sample 

答案 1 :(得分:2)

select A.a, B.b, a.num, b.num, CAST(b.num as float) / cast(a.num as float)
from
(select a, count(*) as num
from @table 
group by a) as A
join 
(select a, b, count(*) as num
from @table
group by a, b) as B on A.a = B.a