sql分组统计
㈠ 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 姓名
㈡ SQL分组统计
其实倒也不难,请解释下:
需要统计的数据列表如下:
门店名称|本在本消费金额|本在他消费金额|他在本消费金额
本在本、本在他、他在本 都是什么意思?????
㈢ sql语句 如何分组后得到记录总数
SELECT COUNT(*)
FROM (SELECT 分组字段 FROM 表
GROUP BY 分组字段
)别名
或者
SELECT COUNT(*)
FROM (SELECT distinct 分组字段 FROM 表)别名
(3)sql分组统计扩展阅读:
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语句完成,语法如下:
㈤ sql分组合并统计查询
select 部门,count(姓名) 人数,(select count(*) from biao where 部门=a.部门 and 状态='状态1') as 状态1,(select count(*) from biao where 部门=a.部门 and 状态='状态2') as 状态2,(select count(*) from biao where 部门=a.部门 and 状态='状态3') as 状态3,(select count(*) from biao where 部门=a.部门 and 状态='状态4') as 状态4 from biao a group by 部门
㈥ sql语句实现分组统计
方法和详细的操作步骤如下:
1、第一步,创建一个测试表,详细代码见下图,转到下面的步骤。
㈦ 高级sql 分组查询统计
用with rollup 可以生成汇总数据,我没环境没法测,只提供思路,用的是楼上oracle的语法
结果是下面这样的,不知是不是你想要的
门店 年月日 数据1 数据2
a 2011-08-24 1 2
a 2011-08-25 3 4
a 2011-08合计: 4 6
a 2011-09-01 5 6
a 2011-09合计: 5 6
select
门店,
case when grouping(to_char(时间,'yyyy-mm-dd'))=0 then to_char(时间,'yyyy-mm')||'合计:' else to_char(时间,'yyyy-mm-dd') end as 年月日
sum(数据1) as 数据1,
sum(数据2) as 数据2
from tab
group by 门店,to_char(时间,'yyyy-mm'),to_char(时间,'yyyy-mm-dd') with rollup
order by to_char(时间,'yyyy-mm'),to_char(时间,'yyyy-mm-dd')
㈧ sql语句 怎么分组统计
USEtest;
CREATETABLEIFNOTEXISTStable1(
idINTPRIMARYKEY,
datetimeColDATETIMENOTNULL,
contentVARCHAR(256)
);
INSERTINTOtable1(id,datetimeCol,content)VALUES(1,"2018-01-0102:02:00","abc");
INSERTINTOtable1(id,datetimeCol,content)VALUES(2,"2018-03-0404:02:00","zxc");
INSERTINTOtable1(id,datetimeCol,content)VALUES(3,"2018-01-0102:18:00","abc12");
INSERTINTOtable1(id,datetimeCol,content)VALUES(4,"2018-04-0423:01:40","mb");
SELECTgroupCol,COUNT(id)AScountColFROM(SELECTEXTRACT(HOURFROMdatetimeCol)ASgroupCol,idFROMtable1);
结果为:
groupCol, countCol
2, 2
4, 1
23, 1
㈨ sql 语句如何分组统计,并用统计结果除以150
直接加上运算符试试: select sj,count(sj)/数 as 平均数 from sheet1 group by sj