sql分组统计
SQL分组查询比如表tableidtypesno1a11012b11023c11014a11015c11026b1103我想分组查询sno,type也分组可selectc...
SQL分组查询
比如表table
id type sno
1 a 1101
2 b 1102
3 c 1101
4 a 1101
5 c 1102
6 b 1103
我想分组查询sno,type也分组
可select count(type),sno from table group by sno只能得到sno分组的结果。
我想要的结果为
t_a t_b t_c sno
2 0 1 1101
0 1 1 1102
0 1 0 1103
(最好有下面一行总的统计,没有也可以)
2 2 2 总和
怎么写sql语句(mysql数据库)
表重新帖一下 表table
id | type | sno
1 | a | 1101
2 | b | 1102
3 | c | 1101
4 | a | 1101
5 | c | 1102
6 | b | 1103
要得到的结果
t_a | t_b | t_c | sno
2 | 0 | 1 | 1101
0 | 1 | 1 | 1102
0 | 1 | 0 | 1103
(最好有下面一行总的统计,没有也可以)
2 | 2 | 2 | 总和 展开
比如表table
id type sno
1 a 1101
2 b 1102
3 c 1101
4 a 1101
5 c 1102
6 b 1103
我想分组查询sno,type也分组
可select count(type),sno from table group by sno只能得到sno分组的结果。
我想要的结果为
t_a t_b t_c sno
2 0 1 1101
0 1 1 1102
0 1 0 1103
(最好有下面一行总的统计,没有也可以)
2 2 2 总和
怎么写sql语句(mysql数据库)
表重新帖一下 表table
id | type | sno
1 | a | 1101
2 | b | 1102
3 | c | 1101
4 | a | 1101
5 | c | 1102
6 | b | 1103
要得到的结果
t_a | t_b | t_c | sno
2 | 0 | 1 | 1101
0 | 1 | 1 | 1102
0 | 1 | 0 | 1103
(最好有下面一行总的统计,没有也可以)
2 | 2 | 2 | 总和 展开
展开全部
貌似你的这个SQL分组统计只跟第二张表有关系,跟另外两张表都没有关系。
假设第二张表T的字段为(id,name,sex,deptno,sal)
检索每个部门不同性别的平均工资,每个部门的平均工资,公司所有员工的平均工资,所有男性的平均工资,和所有女性的平均工资。
select
sum(decode(sex,'男',sal,'女',0))/
sum(decode(sex,'男',1,'女',0))
全男均薪e799bee5baa6e997aee7ad94e4b893e5b19e31333236393131,
sum(decode(sex,'男',0,'女',sal))/
sum(decode(sex,'男',0,'女',1))
全女均薪,
sum(decode(sex,'男',decode(deptno,1,sal,0),'女',0))/
sum(decode(sex,'男',decode(deptno,1,1,0),'女',0))
一男均薪,
sum(decode(sex,'男',decode(deptno,2,sal,0),'女',0))/
sum(decode(sex,'男',decode(deptno,2,1,0),'女',0))
二男均薪,
sum(decode(sex,'男',decode(deptno,3,sal,0),'女',0))/
sum(decode(sex,'男',decode(deptno,3,1,0),'女',0))
三男均薪,
sum(decode(sex,'男',decode(deptno,4,sal,0),'女',0))/
sum(decode(sex,'男',decode(deptno,4,1,0),'女',0))
四男均薪,
sum(decode(sex,'女',decode(deptno,1,sal,0),'男',0))/
sum(decode(sex,'女',decode(deptno,1,1,0),'男',0))
一女均薪,
sum(decode(sex,'女',decode(deptno,2,sal,0),'男',0))/
sum(decode(sex,'女',decode(deptno,2,1,0),'男',0))
二女均薪,
sum(decode(sex,'女',decode(deptno,3,sal,0),'男',0))/
sum(decode(sex,'女',decode(deptno,3,1,0),'男',0))
三女均薪,
sum(decode(sex,'女',decode(deptno,4,sal,0),'男',0))/
sum(decode(sex,'女',decode(deptno,4,1,0),'男',0))
四女均薪,
sum(decode(deptno,1,sal,0))/sum(decode(deptno,1,1,0))
一部均薪,
sum(decode(deptno,2,sal,0))/sum(decode(deptno,2,1,0))
二部均薪,
sum(decode(deptno,3,sal,0))/sum(decode(deptno,3,1,0))
三部均薪,
sum(decode(deptno,4,sal,0))/sum(decode(deptno,4,1,0))
四部均薪,
sum(sal)/count(sal)
人均薪,
sum(sal)
全薪
from
T
/
也可以改为CASE
WHEN
THEN
WHEN
THEN
ELSE
END的语法这个是SQL标准语法,DECODE是ORACLE独特语法。
纯粹就是考察CASE的用法嘛~
假设第二张表T的字段为(id,name,sex,deptno,sal)
检索每个部门不同性别的平均工资,每个部门的平均工资,公司所有员工的平均工资,所有男性的平均工资,和所有女性的平均工资。
select
sum(decode(sex,'男',sal,'女',0))/
sum(decode(sex,'男',1,'女',0))
全男均薪e799bee5baa6e997aee7ad94e4b893e5b19e31333236393131,
sum(decode(sex,'男',0,'女',sal))/
sum(decode(sex,'男',0,'女',1))
全女均薪,
sum(decode(sex,'男',decode(deptno,1,sal,0),'女',0))/
sum(decode(sex,'男',decode(deptno,1,1,0),'女',0))
一男均薪,
sum(decode(sex,'男',decode(deptno,2,sal,0),'女',0))/
sum(decode(sex,'男',decode(deptno,2,1,0),'女',0))
二男均薪,
sum(decode(sex,'男',decode(deptno,3,sal,0),'女',0))/
sum(decode(sex,'男',decode(deptno,3,1,0),'女',0))
三男均薪,
sum(decode(sex,'男',decode(deptno,4,sal,0),'女',0))/
sum(decode(sex,'男',decode(deptno,4,1,0),'女',0))
四男均薪,
sum(decode(sex,'女',decode(deptno,1,sal,0),'男',0))/
sum(decode(sex,'女',decode(deptno,1,1,0),'男',0))
一女均薪,
sum(decode(sex,'女',decode(deptno,2,sal,0),'男',0))/
sum(decode(sex,'女',decode(deptno,2,1,0),'男',0))
二女均薪,
sum(decode(sex,'女',decode(deptno,3,sal,0),'男',0))/
sum(decode(sex,'女',decode(deptno,3,1,0),'男',0))
三女均薪,
sum(decode(sex,'女',decode(deptno,4,sal,0),'男',0))/
sum(decode(sex,'女',decode(deptno,4,1,0),'男',0))
四女均薪,
sum(decode(deptno,1,sal,0))/sum(decode(deptno,1,1,0))
一部均薪,
sum(decode(deptno,2,sal,0))/sum(decode(deptno,2,1,0))
二部均薪,
sum(decode(deptno,3,sal,0))/sum(decode(deptno,3,1,0))
三部均薪,
sum(decode(deptno,4,sal,0))/sum(decode(deptno,4,1,0))
四部均薪,
sum(sal)/count(sal)
人均薪,
sum(sal)
全薪
from
T
/
也可以改为CASE
WHEN
THEN
WHEN
THEN
ELSE
END的语法这个是SQL标准语法,DECODE是ORACLE独特语法。
纯粹就是考察CASE的用法嘛~
展开全部
--sql
server
2000
动态sql。
declare
@sql
varchar(8000)
set
@sql
=
'select
姓名
'
select
@sql
=
@sql
+
'
,
max(case
课程
when
'''
+
课程
+
'''
then
分数
els订唬斥舅俪矫筹蝎船莽e
0
end)
['
+
课程
+
']'
from
(select
distinct
课程
from
tb)
as
a
set
@sql
=
@sql
+
'
,
cast(avg(分数*1.0)
as
decimal(18,2))
平均分
,
sum(分数)
总分
from
tb
group
by
姓名'
exec(@sql)
普通行列转换
问题:假设有张学生成绩表(tb)如下:
姓名
课程
分数
张三
语文
74
张三
数学
83
张三
物理
93
李四
语文
74
李四
数学
84
李四
物理
94
想变成(得到如下结果):
姓名
语文
数学
物理
----
----
----
----
李四
74
84
94
张三
74
83
93
-------------------
*/
create
table
tb(姓名
varchar(10)
,
课程
varchar(10)
,
分数
int)
insert
into
tb
values('张三'
,
'语文'
,
74)
insert
into
tb
values('张三'
,
'数学'
,
83)
insert
into
tb
values('张三'
,
'物理'
,
93)
insert
into
tb
values('李四'
,
'语文'
,
74)
insert
into
tb
values('李四'
,
'数学'
,
84)
insert
into
tb
values('李四'
,
'物理'
,
94)
go
--sql
server
2000
静态sql,指课程只有语文、数学、物理这三门课程。(以下同)
select
姓名
as
姓名
,
max(case
课程
when
'语文'
then
分数
else
0
end)
语文,
max(case
课程
when
'数学'
then
分数
else
0
end)
数学,
max(case
课程
when
'物理'
then
分数
else
0
end)
物理
from
tb
group
by
姓名
server
2000
动态sql。
declare
@sql
varchar(8000)
set
@sql
=
'select
姓名
'
select
@sql
=
@sql
+
'
,
max(case
课程
when
'''
+
课程
+
'''
then
分数
els订唬斥舅俪矫筹蝎船莽e
0
end)
['
+
课程
+
']'
from
(select
distinct
课程
from
tb)
as
a
set
@sql
=
@sql
+
'
,
cast(avg(分数*1.0)
as
decimal(18,2))
平均分
,
sum(分数)
总分
from
tb
group
by
姓名'
exec(@sql)
普通行列转换
问题:假设有张学生成绩表(tb)如下:
姓名
课程
分数
张三
语文
74
张三
数学
83
张三
物理
93
李四
语文
74
李四
数学
84
李四
物理
94
想变成(得到如下结果):
姓名
语文
数学
物理
----
----
----
----
李四
74
84
94
张三
74
83
93
-------------------
*/
create
table
tb(姓名
varchar(10)
,
课程
varchar(10)
,
分数
int)
insert
into
tb
values('张三'
,
'语文'
,
74)
insert
into
tb
values('张三'
,
'数学'
,
83)
insert
into
tb
values('张三'
,
'物理'
,
93)
insert
into
tb
values('李四'
,
'语文'
,
74)
insert
into
tb
values('李四'
,
'数学'
,
84)
insert
into
tb
values('李四'
,
'物理'
,
94)
go
--sql
server
2000
静态sql,指课程只有语文、数学、物理这三门课程。(以下同)
select
姓名
as
姓名
,
max(case
课程
when
'语文'
then
分数
else
0
end)
语文,
max(case
课程
when
'数学'
then
分数
else
0
end)
数学,
max(case
课程
when
'物理'
then
分数
else
0
end)
物理
from
tb
group
by
姓名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select sum(t.t_a), sum(t.t_b), sum(t.t_c), t.sno
from (select count(type) t_a, 0 t_b, 0 t_c, sno
from a
where type = 'a'
group by sno, type
union all
select 0 t_a, count(type) t_b, 0 t_c, sno
from a
where type = 'b'
group by sno, type
union all
select 0 t_a, 0 t_b, count(type) t_c, sno
from a
where type = 'c'
group by sno, type) t
group by t.sno
order by t.sno
from (select count(type) t_a, 0 t_b, 0 t_c, sno
from a
where type = 'a'
group by sno, type
union all
select 0 t_a, count(type) t_b, 0 t_c, sno
from a
where type = 'b'
group by sno, type
union all
select 0 t_a, 0 t_b, count(type) t_c, sno
from a
where type = 'c'
group by sno, type) t
group by t.sno
order by t.sno
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select sno,type ,count(type)from table group by sno,type
这是竖的,横的下面
select sno,sum(case when type='a' then 1 else 0 end) as t_a,sum(case when type='b' then 1 else 0 end) as t_b,sum(case when type='c' then 1 else 0 end) as t_c from table group by sno
这是竖的,横的下面
select sno,sum(case when type='a' then 1 else 0 end) as t_a,sum(case when type='b' then 1 else 0 end) as t_b,sum(case when type='c' then 1 else 0 end) as t_c from table group by sno
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询