前往
大廳
主題

程式小白的學習紀錄_MSSQL語法

失戀大明神 | 2024-05-15 00:39:30 | 巴幣 0 | 人氣 31

使用group by,必須要使用聚合函數,否則一筆資料(列表)中有多個值,sql無法判斷要顯示哪一個值
聚合函數:
avg(?.欄位)as 命名欄位: 列表中的值加總後平均
count(distinct ?.欄位)
distinct:欄位值不重複
count:計算列表的資料筆數
max: 返回列表中最大的值
min: 返回列表中最小的值
string_agg(欄位名,' , '): 返回列表中的所有值,並將值以 , 隔開
sum: 將int類型的資料進行加總
coalesce(合併): 返回資料的第一個非null值,如果全都是null,就返回null,常用於left/right join後的group by
coalesce(資料, 2) <60  --如果全都是null,返回數字2

cast:取小數點,cast(avg(sc.s_score) as decimal(5,2)),表示總共有5個位數,其中2位是小數點。
FORMAT(AVG(CAST(sc.s_score AS FLOAT)), 'N2')
cast(... as float):將數據類型轉換成浮點數
FORMAT(..., 'N2'):用於將顯示的數據格式化,N代表一串數字,2代表保留小數點後兩位

order by(次序): order by 欄位 desc   --descending 下降
top(上面的): select top 2 st.s_id   --抓取前兩筆資料

not exists: 用於排除條件,寫主查詢where後面,子查詢則是用select 1查出已存在的結果,(主查詢和子查詢記得要在where關聯起來,沒有join所以要手動連集)
select st.* from student st where not exists(
select 1 from  Score s
left join Course c on c.c_id = s.c_id
left join Teacher t on t.t_id = c.t_id
where st.s_id=s.s_id and t.t_name='張三'
)
select 1: 只是為了確認查詢有結果

group by:(需要唯一值就想到group by,ex:根據每個唯一的同學...),根據欄位的值進行分組,可以用having下達group by後的條件,而透過group by查詢的資料select必須保證只有一筆
在group by之後,avg(欄位)會自動將多筆資料加總並進行平均計算

on:決定如何將兩張表連結起來
where:對兩張表連結之後的結果進行進一步的查詢

創作回應

更多創作