[SQL] 查詢語法基本介紹 Part 2 (數值函數, Having, 巢狀查詢)
數值函數_COUNT() 資料數量
當我們需要了解資料表中含有幾筆資料時,可使用count()函數進行計算。
範例:列出資料表中有多少筆資料
select count(*)/* 括號中放入要計算的欄位 */
from userinfo /* 從userinfo資料表 */
範例:列出userinfo資料表中有多少個姓王的資料
select count(cname) /* 括號中放入要計算的欄位 */
from userinfo /* 從userinfo資料表 */
where cname like '王%'
select count(*) /* 括號中放入要計算的欄位, 這裡星號代表所有欄位 */
from userinfo /* 從userinfo資料表 */
where cname like '王%'
數值函數_avg() 平均值
當我們需要計算資料表內某欄位的平均值,則可使用avg()。
例如,查詢每一支電話的平均費用
select tel, avg(fee) from bill group by tel
數值函數_sum() 加總
計算資料表某欄位內的加總。
範例:查詢每一支電話費的總額
select tel, sum(fee) from bill group by tel
數值函數_round() 取小數點後幾位
當欄位值(或運算的回傳值)有小數點時,可利用round函數取特定小數點後位數。
SELECT ROUND(235.415, 2)
數值函數_Max()
查詢欄位最大值。
/*查詢每支電話的最高電話費 */
SELECT tel, max(fee) from bill group by tel
數值函數_Max()
查詢欄位最小值。
解一,使用having語法。 [先group by再having]
解二,使用巢狀查詢。
1. 從裡面看到外面,一層一層解。
2. 從裡面寫到外面。
3. 先包好一個查詢,再用外層一套查詢,達成最終的查詢結果。
4. 裡面的查詢一定要給定一個別名。
/*查詢每支電話的最低電話費 */
SELECT tel, min(fee) from bill group by tel
數值函數_Floor()
取整數。
SELECT floor(235.415)
Having 運算值條件
Having 是針對函數產生的值設定條件,因為where無法針對函數產生的值下條件。
通常是使用在一個SQL Command 的最後。
如果被 SELECT 的只有函數欄, 那就不需要 GROUP BY 子句。
基本上having是放在group by後面。
通常是使用在一個SQL Command 的最後。
如果被 SELECT 的只有函數欄, 那就不需要 GROUP BY 子句。
基本上having是放在group by後面。
綜合應用_數值函數、群組、條件判斷、Having
例題:篩選電話費大於300元的平均費用解一,使用having語法。 [先group by再having]
select tel, round(avg(fee),0) as avg_fee
from bill
group by tel
having round(avg(fee),0) > 300 --having 要用在group by 後面
解二,使用巢狀查詢。
select * from(
select tel, round(avg(fee),0) as avg_fee
from bill
group by tel
) as a
where avg_fee > 300
巢狀查詢
一個SQL Command中藏著另一個SQL Command。
**巢狀查詢重點1. 從裡面看到外面,一層一層解。
2. 從裡面寫到外面。
3. 先包好一個查詢,再用外層一套查詢,達成最終的查詢結果。
4. 裡面的查詢一定要給定一個別名。
綜合應用_Max(), GROUP BY, 巢狀查詢, 別名
例題:列出每支電話哪一個月的電話費最高 (資料表內其實有兩個月份的電話費都是最高)
SELECT a.tel, max_fee, dd /*一個SQL Command含兩個查詢*/
FROM (
SELECT tel, max(fee) AS max_fee /*先抓出最高的電話費*/
FROM bill
GROUP BY tel
) AS a, bill AS b /* 從a & bill(as b)裡面再查詢*/
WHERE
a.Tel = b.tel AND
a.max_fee = b.fee
/*設條件使a裡的最大金額與b裡的另外一個最大金額相同,因為有兩個月都是最高 。*/
解法:
利用巢狀查詢,先查出最高的電話費並製表一,再用表一核對原始的費用資料表。
留言
張貼留言