sql学习记录【2】

来源:互联网 发布:小米windows平板3 编辑:程序博客网 时间:2024/05/16 18:26

1.一道SQL语句面试题,关于group by表内容:

info 表

    Date       result

2005-05-09  win

2005-05-09  lose

2005-05-09  lose

2005-05-09  lose

2005-05-10  win

2005-05-10  lose

2005-05-10  lose

如果要生成下列结果, 该如何写sql语句?

               win   lose

2005-05-09      2     2

2005-05-10     1      2

SELECT DATE AS '',SUM(CASE WHEN result='win' THEN 1 ELSE 0 END ) AS 'win',

SUM(CASE WHEN result='lose' THEN 1 ELSE 0 END ) AS 'lose'

FROM info

GROUP BY DATE;

2.表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列

SELECT (CASE WHEN a > b THEN a ELSE b END),

      (CASE WHEN b > c THEN b ELSE c END)

FROM TABLE;

3.请取出tb_send表中日期(SendTime字段)为当天的所有记录? (SendTime字段为datetime型,包含日期与时间)

SELECT * FROM info WHERE DATEDIFF(dd,SendTime,getdate())=0;

4.有一张表,里面有3个字段:chinese,math,english。其中有一条记录chinese 70分,math 80分,english 58分,请用一条sql语句查询出所有记录并按以下条件显示出来(并写出您的思路):

大于或等于80表示excellent,大于或等于60表示pass,小于60分表示fail。

     显示格式: 以上面的chinese 70分,math 80分,english 58分

       chinese              math                english

       pass                  excellent           fail

SELECT (CASE WHEN chinese >= 80 THEN "excellent" WHEN chinese >= 60 THEN "pass" ELSE "fail" END) AS chinese,

  (CASE WHEN math >= 80 THEN "excellent" WHEN math >= 60 THEN "pass" ELSE "fail" END) AS math,

     (CASE WHEN english >= 80 THEN "excellent" WHEN english >= 60 THEN "pass" ELSE "fail" END) AS english

FROM grade; 

5.请用一个sql语句得出结果

从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。如使用存储过程也可以。

table1

月份mon 部门dep 业绩yj

一月份      01      10

一月份      02      10

一月份      03      5

二月份      02      8

二月份      04      9

三月份      03      8

 

table2

部门dep      部门名称dname

     01      国内业务一部

     02      国内业务二部

     03      国内业务三部

     04      国际业务部

 

table3 (result)

部门dep   一月份      二月份      三月份

    01      10        null      null

02      10         8        null

    03      null       5        8

    04      null      null      9

SELECT table1.dep,

SUM(CASE WHEN mon = "一月份" THEN 'yj' ELSE 0 END) AS jun,

SUM(CASE WHEN mon = "二月份" THEN yj ELSE 0 END) AS feb,

SUM(CASE WHEN mon = "三月份" THEN yj ELSE 0 END) AS mar

FROM table1 RIGHT JOIN table2

        ON table1.dep = table2.dep

GROUP BY table1.dep;

 



定义和用法

DATEDIFF() 函数返回两个日期之间的天数。

语法

 DATEDIFF(datepart,startdate,enddate)



FROM:http://blog.sina.com.cn/s/blog_6fe9edef0101i6z0.html


 

 

0 0
原创粉丝点击