在 SQL 中分组时的情况
Case when with group by in SQL
非常简单的任务,但我没有写出相应的SQL。
双因子变量,var1 有 5 个水平,var2 是二进制的 0/1。
我想计算所有按 var1 和 var2 分组但带有新变量的行。
select
var1, var2, count(*)
from
tab
group by
var1, var2;
给我
var1 var2 Count(*)
1 1 0 32
2 1 1 80
3 2 1 80
4 2 0 33
5 3 1 82
6 3 0 33
7 4 1 81
8 4 0 33
9 5 0 33
10 5 1 88
希望是这种格式:
var1 var1=0 var1=1
1 32 80
2 33 80
3 33 82
4 33 81
5 33 88
无效:
select
var1,
case
when var2 = 1 then count(*)
end as svar1,
case
when var2 = 0 then count(*)
end as svar2
from
tab
group by
var1;
我的查询不起作用,因为 var2 不是关联组的一部分,
我如何获得这种格式?
试试这个
select
var1,
case
when var2 = 1 then count(*)
end as svar1,
case
when var2 = 0 then count(*)
end as svar2
from tab
group by var1,var2;
需要做条件聚合..也请提供一些测试数据进行测试
select var1
sum(case when var1=0 then 1 else 0 end) as var1,
sum(case when var1=1 then 1 else 0 end) as var2
group by var1
你可以尝试使用这个查询
select var1,0 as [var1=0],1 as [var1=1]
from(
select var1,var2,QTY from
(
select
var1,
var2,
count(*) as QTY
from tab
group by var1,var2;
) )up pivot (sum(QTY) for var1 in(0,1)) as pvt
order by var1
非常简单的任务,但我没有写出相应的SQL。
双因子变量,var1 有 5 个水平,var2 是二进制的 0/1。
我想计算所有按 var1 和 var2 分组但带有新变量的行。
select
var1, var2, count(*)
from
tab
group by
var1, var2;
给我
var1 var2 Count(*)
1 1 0 32
2 1 1 80
3 2 1 80
4 2 0 33
5 3 1 82
6 3 0 33
7 4 1 81
8 4 0 33
9 5 0 33
10 5 1 88
希望是这种格式:
var1 var1=0 var1=1
1 32 80
2 33 80
3 33 82
4 33 81
5 33 88
无效:
select
var1,
case
when var2 = 1 then count(*)
end as svar1,
case
when var2 = 0 then count(*)
end as svar2
from
tab
group by
var1;
我的查询不起作用,因为 var2 不是关联组的一部分, 我如何获得这种格式?
试试这个
select
var1,
case
when var2 = 1 then count(*)
end as svar1,
case
when var2 = 0 then count(*)
end as svar2
from tab
group by var1,var2;
需要做条件聚合..也请提供一些测试数据进行测试
select var1
sum(case when var1=0 then 1 else 0 end) as var1,
sum(case when var1=1 then 1 else 0 end) as var2
group by var1
你可以尝试使用这个查询
select var1,0 as [var1=0],1 as [var1=1]
from(
select var1,var2,QTY from
(
select
var1,
var2,
count(*) as QTY
from tab
group by var1,var2;
) )up pivot (sum(QTY) for var1 in(0,1)) as pvt
order by var1