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 | 总和
展开
 我来答
汗淑英叶画
2019-01-20 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:34%
帮助的人:1118万
展开全部
貌似你的这个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的用法嘛~
59分粑粑分享生活
高粉答主

2020-05-18 · 专注生活好物分享,解答日常方方面面的问题
59分粑粑分享生活
采纳数:326 获赞数:119825

向TA提问 私信TA
展开全部

方法和详细的操作步骤如下:

1、第一步,创建一个测试表,详细代码见下图,转到下面的步骤。

2、第二步,执行完上面的操作之后,插入测试数据,详细代码见下图,转到下面的步骤。

3、第三步,执行完上面的操作之后,在查询表中进行记录,纤细代码见下图,转到下面的步骤。

4、第四步,执行完上面的操作之后,编写sql,对记录进行分组统计,记录分组数,其结果是4组,见下图。这样,就解决了这个问题了。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
芒素兰励鸟
2020-01-16 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:29%
帮助的人:1029万
展开全部
--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
姓名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朩朩熋
2009-02-12 · TA获得超过1567个赞
知道小有建树答主
回答量:440
采纳率:0%
帮助的人:0
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mailking2001
2009-02-12 · TA获得超过817个赞
知道小有建树答主
回答量:1037
采纳率:100%
帮助的人:753万
展开全部
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
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式