某天在某技術群看見有人發了這樣乙個圖求助,一看就覺得這題考查的是利用sql行轉列
我腦海第一時間就想到用oracle的decode函式來寫,但又想到題目沒有具體說是哪一種資料庫~如果用decode的話,在mysql下是完全不一樣的用法(也是因為這次我才知道mysql也有decode方法,但跟oracle的完全不一樣,其他資料庫暫沒研究)
所以我就回覆寫了這樣乙個sql
初想的sql¶
select t1.d,t1.c1 '這樣的寫法比較直觀,就是先拿「勝」的出來,在拿「負」的出來,最後用日期關聯起來勝',t2.c2 '負'
from
(select
count(result) c1,d from t_result where result ='勝
'group
byd) t1
left
outer
join
(select
count(result) c2,d from t_result where result ='負
'group
byd) t2
on t1.d = t2.d
ps:這裡的t_result是資料表,d是時間列,result是勝負結果列
後面我細想了一下,這樣結果是出來的,但其實效率不高,因為兩次select會導致兩次表的掃瞄,因為之前研究過一下oracle,對這些還是比較敏感的,所以後面又改寫了一下
(可能後面寫的並不是最優,但起碼比最初的有進步,效能有所提公升,畢竟優化都是一步一步來的)
select d,sum(case這樣掃面一次表就可以得出結果了when result='勝
'then
1else
0end
),
sum(case
when result='負
'then
1else
0end
)from
t_result
group
by d
最後,再附上oralce的decode函式寫法
select d,sum(decode(result,'勝',1,0)),sum(decode(result,'
負',1,0
))from
t_result
group
by d
關於乙個sql的寫法
需求是這樣的 有個學生表 create table student id int primary key,name varchar2 200 有個成績表 create table score id int 對應與student 的 id 僅為測試,表結構也沒好好設計 math int,eng int...
幾種SQL語句的寫法
1.一張表中有使用者資訊表user user id,nickname 另外一張表聯絡人表contact user id,friend id 現在要找出聯絡人的資訊 1 selectu1.nicknameasmyselft,u2.nicknameasfriendfromcontact cinnerjo...
幾種使用sql寫法
q表示式可以處理換行 單引號等特殊字元 update t sys res config sql t set t.query sql q long string where t.bm class id t rc com internate config update語句 可以對查詢結果進行update...