乙個SQL的幾種寫法

2022-03-04 12:57:24 字數 1318 閱讀 5655

某天在某技術群看見有人發了這樣乙個圖求助,一看就覺得這題考查的是利用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...