sql分组统计

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 | 总和

貌似你的这个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的用法嘛~
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-05-18

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

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

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

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

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

第2个回答  2020-01-16
--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
姓名
第3个回答  2009-02-12
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
第4个回答  2009-02-12
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本回答被提问者和网友采纳

sql分组统计
在SQL中进行分组统计,通常使用GROUP BY子句来实现。该子句能够将选定的数据按照某一列或多列的值进行分组,并计算每个组的统计信息,如计数、求和、平均值等。通过分组统计,可以从大量数据中提取关键信息,进行数据分析和报表生成。详细解释:1. GROUP BY子句的基本功能:GROUP BY子句是SQL中用于对结果...

SQL分组统计把不存在的组计数为0
对于第一种方法,即返回结果为每个分组对应一行记录,具体实现时需先进行分组统计,接着使用`union`连接所有指标名称和对应的0值查询,最后再次对分组字段进行统计汇总。在MySQL中此方法可直接应用,但在其他数据库系统中可能需要额外的`from`语句,并连接系统表以实现相同功能。第二种方法则直接返回结果为...

【数据分析-SQL】MySQL 之 GROUP BY分组统计 vs Excel和Python的数据...
【数据分析-SQL】MySQL GROUP BY与Excel和Python数据透视表比较SQL的GROUP BY功能主要针对数据分组统计,比如计算班级学生的平均成绩,基于每个学生的成绩记录。SQL分组后,如查询班级平均分并包含学生姓名,结果中显示的是每个班级的第一名学生姓名,保留了最早的记录信息。相比之下,SQL仅支持行分组,不支持...

用sql语句统计数据库某个字段中相同的数据有多少条?
2、用Group By分组:Group By + [分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。这里,分组字段是a,所以数据集分成了你、我、他三个组。然后用Count(*)分别按照各个组来统计各自的记录数量。3、Count(*)函数:Count(*) 函数返回表中...

SQL进行排序、分组、统计的10个新技巧
HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。7.使用聚合函数统计分组数据 分组数据可以帮助我们分析数据,但是有时我们可能需要更多的信息而不仅仅是分组。你可以使用聚合函数来统计分组数据。例如,下面的语句显示每批订购单的总价钱。SELECT OrderID, Sum(Cost * Quantity) AS OrderTotal...

sql语句 如何分组后得到记录总数
SELECT COUNT(*)FROM (SELECT 分组字段 FROM 表 GROUP BY 分组字段 )别名 或者 SELECT COUNT(*)FROM (SELECT distinct 分组字段 FROM 表)别名

sql 分组统计
首先,我们使用SQL语句`SELECT`对日期字段进行分组,格式化为'YYYY-MM-DD',同时计算每个日期的记录数,如`SELECT DATE_FORMAT(date_field, '%Y-%m-%d') AS dToday, COUNT(*) AS memberNums FROM table_name GROUP BY DATE_FORMAT(date_field, '%Y-%m-%d') ORDER BY dToday DESC`。然后,...

用sql语句统计数据库某个字段中相同的数据有多少条?
1、要统计数据库中某个字段中相同数据的条数,可以使用SQL的分组和聚合功能。具体的SQL语句如下:```sql SELECT a, COUNT(*)FROM A GROUP BY a;```这里,字段a被视为分组依据,相同值的a会被分到同一组中,COUNT(*)函数则用于计算每组中的记录数。2、在SQL查询中,使用`GROUP BY`语句可以对...

sql中根据表中一个字段分组如何分别统计每个分组的记录数?
分组函数允许嵌套,但是嵌套之后的分组函数的查询之中不能再出现任何其它字段 例子:按照职位分组,统计平均工资最高的工资 当添加其它字段‘job’之后出现错误 例子:查询出每个部门的名称、位置、部门的人数、平均工资 确定所需的数据表: emp表:部门的人数,平均工资 dept表:部门的名称,位置 确定已知...

「SQL 基础篇」分组查询
在 SQL 的基础探索中,我们已经领略了聚合函数的强大,它们能对数据进行汇总,如计数、求和、平均值和极值的计算。然而,当需要按特定条件进行分组统计时,分组查询就显得尤为重要。分组查询的实现主要依赖于 GROUP BY 子句,它在 SELECT 语句中使用,将数据划分为逻辑组,针对每个组执行聚合操作。例如,...

相似回答