MYSQL之SQL高級運用(幫助你高效率編程)

小編說:這些知識常出如今面試題,可是實用價值很高。。其實也就是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

若是要生成下列結果, 該如何寫sql語句? spa

勝 負
2005-05-09 2 2
2005-05-10 1 2
------------------------------------------
select time, sum(case when shengfu='勝' then 1 else 0 end) as '勝',sum(case when shengfu='負' then 1 else 0 end) as '負' from my_table group by time blog

2.請教一個面試中遇到的SQL語句的查詢問題
表中有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 esle c end) from my_table get


3.面試題:一個當天日期判斷的sql語句?
請取出tb_send表中日期(SendTime字段)爲當天的全部記錄?(SendTime字段爲datetime型,包含日期與時間)
------------------------------------------
select * from tb where datediff(dd,SendTime,getdate())=0 數學

 

 

 

4.有一張表,裏面有3個字段:語文,數學,英語。其中有3條記錄分別表示語文70分,數學80分,英語58分,請用一條sql語句查詢出這三條記錄並按如下條件顯示出來(並寫出您的思路):
大於或等於80表示優秀,大於或等於60表示及格,小於60分表示不及格。
顯示格式:
語文 數學 英語
及格 優秀 不及格
------------------------------------------
select
(case when 語文>=80 then '優秀'
when 語文>=60 then '及格'
else '不及格') as 語文,
(case when 數學>=80 then '優秀'
when 數學>=60 then '及格'
else '不及格') as 數學,
(case when 英語>=80 then '優秀'
when 英語>=60 then '及格'
else '不及格') as 英語,
from my_table
table


7.請用一個sql語句得出結果
從table1,table2中取出如Result所列格式數據,注意提供的數據及結果不許確,只是做爲一個格式向你們請教。
如使用存儲過程也能夠。 class


------------------------------------- date

table1 select

月份mon   部門dep       業績yj
一月份      01                10
一月份      02                10
一月份      03                5
二月份      02                8
二月份      04                9
三月份      03                8
-----------------------------------

table2

部門dep            部門名稱dname
01                      國內業務一部
02                      國內業務二部
03                      國內業務三部
04                      國際業務部
---------------------------------------------------

Result

部門名稱dname     一月份    二月份      三月份
國內業務一部         10          null         null
國內業務二部         10          8             null
國內業務二部         null         5            8
國際業務部            null         null         9
---------------------------------------------------

select a.dep,
sum(case when a.mon=1 then a.yj else 0 end) as '一月份',
sum(case when a.mon=2 then a.yj else 0 end) as '二月份',
sum(case when a.mon=3 then a.yj else 0 end) as '三月份'
from table2 b left join table1 a on a.dep=b.dep


8.華爲一道面試題
一個表中的Id有多個記錄,把全部這個id的記錄查出來,並顯示共有多少條記錄數。
------------------------------------------
select id, Count(*) from tb group by id having count(*)>1

相關文章
相關標籤/搜索