SQL练习

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

你可能感兴趣的:(sql)