欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。
结果是图中的第二幅图

SQL练习


建表


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 面试题