ad mm
a1 8
a1 9
a1 10
a2 9
a2 10
a3 10
要求统计结果如下
ad m8 m9 m10 all
a1 1 1 1 3
a2 0 1 1 2
a3 0 0 1 1
就是在结果中统计中A表中mm列分别等于8、9、10时ad列 出现的次数以及总次数。
如 a1 在mm=8时出现过一次,在mm=9时出现过一次,在mm=10时出现过一次,则总次数all为3
SELECT ad,
SUM(CASE WHEN mm=8 then 1 else 0 end),
sum(CASE WHEN mm=8 then 1 else 0 end),
...
...
COUNT(*)
FROM tb
GROUP BY ad
--look this
*
标题:普通行列转换(version 2.0)
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-03-09
地点:广东深圳
说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。
问题:假设有张学生成绩表(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 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 + ' from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
---------------------------------
/*
问题:在上述结果的基础上加平均分,总分,得到如下结果:
姓名 语文 数学 物理 平均分 总分
---- ---- ---- ---- ------ ----
李四 74 84 94 84.00 252
张三 74 83 93 83.33 250
*/
--SQL SERVER 2000 静态SQL。
select 姓名 姓名,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理,
cast(avg(分数*1.0) as decimal(18,2)) 平均分,
sum(分数) 总分
from tb
group by 姓名
--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)
--SQL SERVER 2005 静态SQL。
select m.* , n.平均分 , n.总分 from
(select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b) m,
(select 姓名 , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程
exec ('select m.* , n.平均分 , n.总分 from
(select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m ,
(select 姓名 , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名')
drop table tb
DECLARE @a TABLE(ad VARCHAR(2), mm INT)
insert @a select 'a1', 8
union all select 'a1', 9
union all select 'a1', 10
union all select 'a2', 9
union all select 'a2', 10
union all select 'a3', 10
SELECT ad,m8=(SELECT COUNT(1) FROM @a WHERE ad=a.ad AND mm=8 ),
m9=(SELECT COUNT(1) FROM @a WHERE ad=a.ad AND mm=9 ),
m10=(SELECT COUNT(1) FROM @a WHERE ad=a.ad AND mm=10 ),
[all]=(SELECT COUNT(1) FROM @a WHERE ad=a.ad )
FROM @a a
GROUP BY ad
--result
/*
ad m8 m9 m10 all
---- ----------- ----------- ----------- -----------
a1 1 1 1 3
a2 0 1 1 2
a3 0 0 1 1
(所影响的行数为 3 行)
*/
文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储...
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。(C语言) #include<stdio.h> int main(){ char ch; int space=0,number=0,character=0,other=0; ch=getchar...
已经有好久没写sql语句了,好多语法都忘记了,今天要写一个求一段时间内数据的统计,遇到了一丢丢小麻烦。低级错误,把正确的语法写出来,以备以后再忘记了。<select id="childbirthSummary" ...
第一种方法: SELECT user.sex, count(user.sex) as 总数 FROM test.user group by user.sex; 执行结果 第二种方法: select sum(case when sex = '男' then 1 else 0 end) 男生人数 , sum...
求oracle sql语句统计数据 要统计出勤率、迟到次数、旷工次数 签到表(ManualSign) 字段: SignId:签到表的ID ,UserId:用户ID ,SignTime:签到时间 ,SignDesc:签到备注 ,SignTag:签到标记(签到、签退) 样例记录:...
-- 查询 统计同一张表中 各种情况, 列转行 SELECT a.a1 '是否有记录' , b.b1 '时间是否匹配' , c.c1 '中间户是否匹配' , d.d1 '金额是否匹配' FROM ( SELECT count( * )a1 FROM repay_diff WHERE assets_id = ...
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) 7天 ...SELECT * FROM 表名 where DATE_SUB(CURDATE(), ...
求 SQL 语句,定重谢。 ===== 4 月 9 日下午 4 点补充说明 ===== 该评分表实际上为学生综合素质评分表。学生的综合素质评价分为 A,B,C,D 四个大类,下面分别有四个小类,即,A 类有 A1-A4,B 类有 B1-B4,C...
需求:共有协议X份,已签XX份,待签X份 sql: select count(1) 总记录数, sum(case when XY_STATUS='1' then 1 else 0 end)待签, sum(case when XY_STATUS='2' then 1 else 0 end)已签 from YG.T_ZHGL ...
1. 这本书对Python的知识点的描述很详细,而且排版看的很舒服. 2. 几个例题:假装自己从零开始学,将一些有代表性、有意思的例题抽取出来. 3. 还有自己对一部分课后复习题,全部课后上机实践题的解题思路
表的结构 【这张表---- low 是上限值 ;...①、函数min、max、avg、count 等 【a , b , tag, low, high 分别是两张表的字段】 select 字段 ,count(字段) as count_a , min(字段) as min_b , ...
laravel DB::table('tablename')->select(DB::raw('count(key=value or null) as name1 , count(key=value or null) as name2'))->get(); 原生SQL ...select count(key =value or null) as name1,count(key=...
有一个表结构如下: 地区 业务 操作(退订/订购) 成功/失败(1 表示成功,0表示失败) —————————————————————————————————— 统计出来是按地区和业务分组统计得出如下表 地区 ...
SQL一条语句统计记录总数及各状态数 方法一、 SELECT SUM(正确数)+SUM(错误数) AS 总记录数,SUM(正确数),SUM(错误数) FROM ( SELECT COUNT(1) 正确数,0 错误数 FROM TB WHERE STATUS=1 UNION ...
数据统计select * from table where DATE_SUB(CURDATE(),INTERVAL 7 DAY) (createtime); 七天之前数据 30天 select * from table where to_days(createtime) =to_days(now()); 今天数据 select * from table where ...
-- sql统计语句写法-- 门禁查询 正常 报警 故障select sum(case when value = 0 then 1 else 0 end) as normalNum, sum(case when value = 1 then 1 else 0 end) as warningNum, sum(case when value = 2 then 1...
MySQL 面试题 MySQL 涉及的内容非常非常非常多,所以面试题也容易写的杂乱。当年,我们记着几个一定要掌握的重心: 重点的题目添加了【重点】前缀。 索引。 ...因为 MySQL 还会有部分内容和运维相关度比较高,所以...
select decode(grouping(DATA_ID), 1, '合计', DATA_ID) as DATA_ID, sum(H1) as H1, sum(H2) as H2 from (select DATA_ID, H1, H2 from TB_REPORT_f302050700 where DATA_ID betw...
例2:用C++程序,统计一个字符串中的数字、字符和特殊字符的个数 代码如下: //分别统计一个字符串中的数字、字母和特殊字符的个数 #include #include #define MAX 1024 using namespace std; //统计函数 void cal...
SELECT '部门','未跟进数统计数';2.要用到哪些表?FROM kf_department AS dept JOIN kf_clerkuser AS kf_user ON dept.ID = kf_user.BELONGDID JOIN kf_client AS kclient ON kf_user.CLERK_ID=kclient....
使用java,求100以内的质数(素数),做这道题目,有很多种方式!我代码中写了3种,大家可以任选一种!很多公司的面试的时候,笔试的时候很喜欢出这道题目。 (java的面试中很多时候都会考这道题目,不光可以考察多层...
SQL一条语句统计记录总数及各状态数 方法一、 SELECT SUM(正确数)+SUM(错误数) AS 总记录数,SUM(正确数),SUM(错误数) FROM ( SELECT COUNT(1) 正确数,0 错误数 FROM TB WHERE STATUS=1 UNION ALL SELECT 0 ...
订单表中每一行对应一个订单 一个订单对应一种商品 2 订单表中的SUM统计 说明: sum统计就是总计 总计= 单计1 + 单计2 + 单计3 + .... + 单计n (1)返回订单表中所有订单中对应的每一商品的数量的...
一、根据学生的分数段统计各个分数段的学生总数 create table class ( id int(11) not null auto_increment, score int(11) default 0, primary key(id) )engine=innodb auto_increment=21 default charset=utf...
如图:程序员在进行如下的统计时,现在提供两种实现方案: 方案一:运用 SEKECT CASE WHEN EXPLAIN SELECT count(*) AS '总数', count( CASE oup.status WHEN '1' THEN oup.id END ) AS '未绑定...
1、主要是利用Having语句进行,由于where不能与聚合函数一起使用,所以用having SELECT MC,COUNT(MC) AS SL FROM JSB GROUP BY MC HAVING(COUNT(MC)>1) 2、SELECT MC,SL FROM (SELECT MC,COUNT(MC) AS SL ...
实际应用中,有时候只是想统计符合条件的数据条数,并不需要返回详细数据,以加快数据传输。这时候可以设置"size": 0,表示不返回数据详情,DSL查询语句如下: { "query": { "bool": { "must": [ { "match": ...
使用sql语句统计重复某个字段出现重复次数 假如我有一张成绩表grade,表数据如下: name class score 张三 语文 80 张三 数学 90 马芸 化学 88 马芸 数学 90 张酒 数学 99 张酒 语文 66 张酒 ...
有一个业务需求 统计各个景区的入园人数、销售额以及入园人数和销售额的同比 以月度为例子同比为例;环比类似 思路分析:表a首先统计出当月的入园人数、销售额,表b统计出同期的入园人数、销售额(在a的基础...
mysql语句统计每个小时的订单总数sql语句Mysql 查询一天中每半小时记录的数量 sql语句 SELECT HOUR ( e.create_time ) AS HOUR, count( * ) AS Count FROM sale_order e WHERE e.create_time between '2018-...