SQL练习
程序员文章站
2024-03-15 18:07:36
...
1.一道SQL语句面试题,关于group by
表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负
如果要生成下列结果, 该如何写sql语句?
胜 负
2005-05-09 2 2
2005-05-10 1 2
创建表
create table tmp(rq varchar(10),shengfu nchar(1))
insert into tmp values('2005-05-09','胜')
insert into tmp values('2005-05-09','胜')
insert into tmp values('2005-05-09','负')
insert into tmp values('2005-05-09','负')
insert into tmp values('2005-05-10','胜')
insert into tmp values('2005-05-10','负')
insert into tmp values('2005-05-10','负')
结果:这个用的mysql
SELECT
rq 日期,
SUM(CASE
WHEN shengfu = '胜' THEN 1
ELSE 0
END) '胜',
SUM(CASE
WHEN shengfu = '负' THEN 1
ELSE 0
END) '负'
FROM
tmp
GROUP BY rq;
2,请用一个sql语句得出结果
从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。
结果是图中的第二幅图
建表
CREATE TABLE table1 (
mon VARCHAR(50),
dep VARCHAR(20),
yj VARCHAR(20)
);
insert into table1(mon,dep,yj) values ('一月份','01','10');
insert into table1 (mon,dep,yj) values ('一月份','02','10');
insert into table1(mon,dep,yj) values ('一月份','03','5');
insert into table1(mon,dep,yj) values ('二月份','02','8');
insert into table1 (mon,dep,yj) values ('二月份','04','9');
insert into table1 (mon,dep,yj) values ('三月份','03','8');
create table table2 (
dep varchar(20),
dname varchar(20)
);
insert into table2(dep,dname) values ('01','国内业务一部');
insert into table2(dep,dname) values ('02','国内业务二部');
insert into table2(dep,dname) values ('03','国内业务三部');
insert into table2(dep,dname) values ('04','国际业务部');
我写的结果,有更好的SQL请指教(这个用的PLSQL,因为老是用SUM函数保存,我也不知道为什么)
解决:2017-12-15 mysql版本的问题,sum函数后面不能有空格
SELECT T1.DEP 部门,
SUM ( CASE
WHEN T1.MON = '一月份' THEN
T1.YJ
ELSE
NULL
END ) 一月份,
SUM ( CASE
WHEN T1.MON = '二月份' THEN
T1.YJ
ELSE
NULL
END ) 二月份,
SUM ( CASE
WHEN T1.MON = '三月份' THEN
T1.YJ
ELSE
NULL
END ) 三月份
FROM TABLE1 T1, TABLE2 T2
WHERE T1.DEP = T2.DEP
group BY T1.DEP
ORDER BY TO_NUMBER(T1.DEP) ;
/*
用一条SQL语句 查询出下面的结果
*/
name 语文 数学 英语
张三 81 75 75
李四 76 90 90
王五 81 100 90
建表:
create table sc1 (
name varchar(50),
kecheng varchar(50),
fenshu varchar(50)
);
insert into sc1(name,kecheng,fenshu) values ('张三','语文','81');
insert into sc1(name,kecheng,fenshu) values ('张三','数学','75');
insert into sc1(name,kecheng,fenshu) values ('张三','英语','75');
insert into sc1(name,kecheng,fenshu) values ('李四','语文','76');
insert into sc1(name,kecheng,fenshu) values ('李四','数学','90');
insert into sc1(name,kecheng,fenshu) values ('李四','英语','90');
insert into sc1(name,kecheng,fenshu) values ('王五','语文','81');
insert into sc1(name,kecheng,fenshu) values ('王五','数学','100');
insert into sc1(name,kecheng,fenshu) values ('王五','英语','90');
结果:
SELECT
name,
SUM(CASE
WHEN kecheng = '语文' THEN fenshu
ELSE 0
END),
SUM(CASE
WHEN kecheng = '语文' THEN fenshu
ELSE 0
END),
SUM(CASE
WHEN kecheng = '语文' THEN fenshu
ELSE 0
END)
FROM
sc1 group by name