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是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的SQL接口。 它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。    结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。    美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了SQL标准。ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和International Electrotechnical Commission(IEC)的成员之一。ANSI 发布与国际标准组织相应的美国标准。1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSI SQL-92。ANSI SQL-92有时被称为ANSI SQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL 标准。SQL Server使用ANSI SQL-92的扩展集,称为T-SQL,其遵循ANSI制定的 SQL-92标准。    SQL语言包含4个部分:    数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。    数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。    数据查询语言(DQL),例如:SELECT语句。    数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。    SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页