[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()

查詢欄位最小值。
/*查詢每支電話的最低電話費 */
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後面。

綜合應用_數值函數、群組、條件判斷、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裡的另外一個最大金額相同,因為有兩個月都是最高 。*/

解法:
利用巢狀查詢,先查出最高的電話費並製表一,再用表一核對原始的費用資料表。


留言

Popular Posts

[T-SQL] T-SQL 基本介紹_筆記

[SQL] 查詢語法基本介紹 Part 5 (視觀表 View)

[SQL] MS-SQL資料庫卸離與備份還原