×

sql分组统计

sql分组统计(SQL 分组统计 同字段不同类型数据分别统计)

admin admin 发表于2023-03-06 16:18:14 浏览46 评论0

抢沙发发表评论

本文目录

SQL 分组统计 同字段不同类型数据分别统计


这个意思?

select sum(case when name1=’1’ then money else 0 end) name1,
sum(case when name1=’2’ then money else 0 end) name2,
sum(case when name1 in(’1’,’2’) then money else 0 end) money
from test1

不过你给的那结果不对吧?


sql中根据表中一个字段分组分别统计每个分组的记录数


分组统计可以参考以下操作:

当数组重复的时候分组才有意义,因为一个人也可以分为一组,只是没有意义而已,分组采用GROUP BY语句完成,语法如下:

例子: 
按照部门编号分组,求出每个部门的人数,平均工资

按照职位分组,求出每个职位的最高和最低工资:

一旦分组之后,实际上对于语法上就会出现新的限制: 
分组函数可在没有分组的时候单独使用,却不能出现其他的查询字段:

ename就是其它查询字段。在select子句之后,只能出现分组的字段和统计函数,其它的字段不能出现

分组函数允许嵌套,但是嵌套之后的分组函数的查询之中不能再出现任何其它字段 
例子:按照职位分组,统计平均工资最高的工资

当添加其它字段‘job’之后出现错误

例子:查询出每个部门的名称、位置、部门的人数、平均工资 
确定所需的数据表: 
emp表:部门的人数,平均工资 
dept表:部门的名称,位置 
确定已知的关联字段: 
emp.deptno = dept.deptno 

发现dname存在重复,可以进行分组去除重复,按照之前对分组的理解,只要数据重复那么就有可能进行分组的查询操作,但是此时与之前的分组操作 不太一样,之前的分组是针对一张实体表进行分组的(emp,dept都属于实体表),但是对于以上的数据是通过查询结果显示的,所以是一张临时的虚拟表,但是不管是否是实体表还是虚拟表,只要是有重复,那么就直接进行分组


sql语句 怎么分组统计


USE test;
CREATE TABLE IF NOT EXISTS table1 (
 id INT PRIMARY KEY,
 datetimeCol DATETIME NOT NULL,
 content VARCHAR(256)
);
INSERT INTO table1(id, datetimeCol, content)  VALUES(1, “2018-01-01 02:02:00“,  “abc“);
INSERT INTO table1(id, datetimeCol, content)  VALUES(2, “2018-03-04 04:02:00“,  “zxc“);
INSERT INTO table1(id, datetimeCol, content)  VALUES(3, “2018-01-01 02:18:00“,  “abc12“);
INSERT INTO table1(id, datetimeCol, content)  VALUES(4, “2018-04-04 23:01:40“, “mb“);
SELECT groupCol, COUNT(id)  AS countCol FROM (SELECT EXTRACT(HOUR FROM datetimeCol) AS groupCol, id FROM table1) AS T1 GROUP BY groupCol ORDER BY groupCol;

结果为:

groupCol, countCol

2, 2

4, 1

23, 1


sql分组统计


貌似你的这个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的用法嘛~

sql语句 如何分组后得到记录总数


SELECT COUNT(*) 

FROM (SELECT 分组字段 FROM 表 

GROUP BY 分组字段 

)别名 

或者 

SELECT COUNT(*) 

FROM (SELECT distinct 分组字段 FROM 表)别名

扩展资料:

SQL分组查询

在SQL Server中使用的分组查询是ORDER BY子句,使用ORDER BY子句要同聚合函数配合使用才能完成分组查询,在SELECT查询的字段中如果字段没有使用聚合函数就必须出现在ORDER BY子句中(即SELECT后边的字段名要么出现在聚合函数中,要么在ORDER BY子句中使用)

在分组查询中还可以配合使用HAVING子句,定义查询条件。

使用group by进行分组查询

在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:

1、被分组的列

2、为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数

3、group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面


sql中根据表中一个字段分组如何分别统计每个分组的记录数


分组统计可以参考以下操作:

当数组重复的时候分组才有意义,因为一个人也可以分为一组,只是没有意义而已,分组采用GROUP BY语句完成,语法如下:

例子: 
按照部门编号分组,求出每个部门的人数,平均工资

按照职位分组,求出每个职位的最高和最低工资:

一旦分组之后,实际上对于语法上就会出现新的限制: 
分组函数可在没有分组的时候单独使用,却不能出现其他的查询字段:

ename就是其它查询字段。在select子句之后,只能出现分组的字段和统计函数,其它的字段不能出现

分组函数允许嵌套,但是嵌套之后的分组函数的查询之中不能再出现任何其它字段 
例子:按照职位分组,统计平均工资最高的工资

当添加其它字段‘job’之后出现错误

例子:查询出每个部门的名称、位置、部门的人数、平均工资 
确定所需的数据表: 
emp表:部门的人数,平均工资 
dept表:部门的名称,位置 
确定已知的关联字段: 
emp.deptno = dept.deptno 

发现dname存在重复,可以进行分组去除重复,按照之前对分组的理解,只要数据重复那么就有可能进行分组的查询操作,但是此时与之前的分组操作 不太一样,之前的分组是针对一张实体表进行分组的(emp,dept都属于实体表),但是对于以上的数据是通过查询结果显示的,所以是一张临时的虚拟表,但是不管是否是实体表还是虚拟表,只要是有重复,那么就直接进行分组


求助 sql server分组统计问题


你是来搞笑的么。。。。。
两个语句中最后面的一个左连是费的。
上面的语句用he.idISNOTNULL做where条件,又用he.id排序。但是he.id本来就等于h.ORDERED_DOCTOR_ID
hrm_employee这个员工表属于基础信息,正常价格是不带delete功能的。所以根本没必要存在。这个连表。
然后就是解决你上面会上面和下面两个SQL不一致的问题了
问题出现再你h和d两个联表上。从你第一段SQL看出,S_ZYFYLB_DM是复数存在的,也就是有笛卡儿积。然而你“参与列数”字段居然加了 distinct 这个关键字。
distinct是全部列数数据相同才会触发唯一机制。所以你第一个SQL的distinct触发无效。
第二个SQL只有COUNT统计,肯定能触发distinct了。
所以就变成总行数有差异了。

如何使用SQL语句,实现多条件分组统计


搂主的
SQL
语句,有2点问题
其一.
ACCESS
不支持
CASE
WHEN
要使用
IIF
函数来替换
语法
IIf(expr,
truepart,
falsepart)
IIf
函数的语法包含以下参数
(参数:为操作、事件、方法、属性、函数或过程提供信息的值。):
参数
说明
expr
必选。要计算的表达式。
truepart
必选。expr

True
时返回的值或表达式。
falsepart
必选。expr

False
时返回的值或表达式。
其二.
count
使用的不正确,
应该修改为
sum
select
型号,count(
...
)
as
未报废数量
最后的SQL,
尝试修改为:
select
型号,
sum
(
iif
(
是否报废=’否’
,
型号
,
0
)
)
as
未报废数量,
sum(
iif
(
是否借出=’是’,
型号,
0
)
)
as
已借出数量
from
a
group
by
型号
看看能否获得正确结果么?

sql 数据分组统计


select 日期,用户,产品,sum(case when 质量=’好’ then 数量 else 0 end) 好数量,
sum(case when 质量=’坏’ then 数量 else 0 end) 坏数量
from 表名
group by 日期,用户,产品

sql 分组统计


--SQL SERVER 2000 动态SQL。
declare @sql varchar(8000)
set @sql = ’select 姓名 ’
select @sql = @sql + ’ , max(case 课程 when ’’’ + 课程 + ’’’ then 分数 else 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 姓名