--in
select * from 課程
where 課程編號='CS203' or 課程編號='CS213' or 課程編號='CS283' or 課程編號='CS111'
select * from 課程
where 課程編號 in ('CS203','CS213','CS283','CS111')
select * from 課程
where 課程編號='CS283'
彙總函數 最大值 平均值 ... ... ...
忽略null空值但記錄空白值
--聚合(彙總)函數(Aggregate Function)
--count 記筆數
select count(*) as 學生人數 from 學生
select count(姓名) as 學生人數 from 學生
select count(學號) as 學生人數 from 學生
select count(生日) as 學生人數 from 學生
--sum 加總
select sum(薪水) as 薪水總額 from 員工
--avg 平均
select avg(薪水) as 薪水平均 from 員工
--max 比最高
select max(薪水) as 最高薪 from 員工
--min 比最小
select min(薪水) as 最低薪 from 員工
------------------------------------------------
--多筆欄位
select count(*) as 員工人數, sum(薪水) as 薪水總額,
avg(薪水) as 薪水平均,max(薪水) as 最高薪, min(薪水) as 最低薪
from 員工
------------------------------------------------
--組合運算
select count(*) as 員工人數, sum(薪水) as 薪水總額,
avg(薪水) as 薪水平均,max(薪水) as 最高薪, min(薪水) as 最低薪,
max(薪水)-min(薪水), avg(薪水)-min(薪水),max(薪水)-avg(薪水)
from 員工
--------------------------------------------------
--以 group by 為基準做統計
select 城市, count(*) as 員工人數, sum(薪水) as 薪水總額,
avg(薪水) as 薪水平均,max(薪水) as 最高薪, min(薪水) as 最低薪,
max(薪水)-min(薪水), avg(薪水)-min(薪水),max(薪水)-avg(薪水)
from 員工
group by 城市
group by -- (相同的資料作群組)可以達到如以下相同效果
distinct 小排序到大 保留一筆重複去掉
不管資料幾筆經過聚合函數後只會顯示你想要的資料筆數/清單內容,而不是原來的。
明細 資料筆數很多 多副主key 通常拿來做多方面統計
select 後面的欄位 只要有一個用到彙總運算,沒有彙總運算的欄位必須group by不然會錯誤
--group by
select 學分 from 課程
select distinct 學分 from 課程
select 學分 from 課程
group by 學分
---------------
select 學號,count(*) as 選課數 from 班級
group by 學號
-- 子句查詢
select 學號,count(*) as 選課數
from 班級
where 學號='S004'
group by 學號
報表明係必須考慮到主檔筆數可以看出別的東西
ex.查詢明細賣出物品 但沒跟主檔對比 看不出沒賣出去的
單從教授 被選課 看不出一些東西
單從課程 被選課 也看不出來
但 從 教授 課程 被選課 就能看出 其實同一堂課有兩個教授開課,有不同學生分別選擇
子句一定要放主句後面
select from
的子句 where group by
group by 的子句 having
where 沒有辦法查詢聚合函數 ex. where count (*)<3 xxxxxx 錯誤
不能用別名 having 因為執行順序 from - > having 最後才執行 select
order by 排序 小到大 順排
order by 欄位 desc 逆排 大到小
姓名 陳小安 張無忌
陳比張多筆畫 就不比後面 一樣就比第二 一樣在比第三 在一樣就依據 key 再來就是最左側欄位
select 執行完才會執行order by 且一定寫在最後面
order by 教授欄位 dec , 學號
如果能夠用教授欄位逆排,不然就用學號順排
order by 可以用別名因為select已經被執行完了
--執行順序
from > where > group by > having > select > order by
--撰寫順序
select --from --where --group by --having --order by
2008up SS 才能用
用在肉眼無法辨識的百萬筆資料
with rollup
with cube
grouping sets 要在兩欄比較時 (小計) 才有意義不然就只是group by
--with rollup
select 教授編號,課程編號,count(*) as 被選課數
from 班級
group by 教授編號,課程編號
select 教授編號,count(*) as 被選課數
from 班級
group by 教授編號
select 課程編號,count(*) as 被選課數
from 班級
group by 課程編號
select 教授編號,課程編號,count(*) as 被選課數
from 班級
group by 教授編號,課程編號 with rollup
--with cube
select 教授編號,課程編號,count(*) as 被選課數
from 班級
group by 教授編號,課程編號 with cube
------------------------------
--grouping sets
select 教授編號,課程編號,count(*) as 被選課數
from 班級
where 教授編號 in ('I001','I003')
group by grouping sets
(
教授編號,
課程編號,
(教授編號, 課程編號),
()
)