本文目录
- SQL 分组统计 同字段不同类型数据分别统计
- sql中根据表中一个字段分组分别统计每个分组的记录数
- sql语句 怎么分组统计
- sql分组统计
- sql语句 如何分组后得到记录总数
- sql中根据表中一个字段分组如何分别统计每个分组的记录数
- 求助 sql server分组统计问题
- 如何使用SQL语句,实现多条件分组统计
- sql 数据分组统计
- sql 分组统计
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 姓名