SQL SERVER教學第四天筆記

SQL資料類別

整數(INTEGER)
帶小數點的浮點數(REAL)
用單引號標記的文字(TEXT)
空值、遺漏值(NULL)

練習

(1) 將 movies 資料表上的年份從西元轉成民國
(2) 將 runtime 從分鐘轉換為秒鐘
(3) 將 runtme 從分鐘轉換為小時

SELECT *
,[release_year] – 1911 AS 民國
,[runtime] AS 分鐘
,[runtime]*60 AS 秒鐘
,[runtime]/60.0 AS 小時
FROM [imdb].[dbo].[movies]

SQL SERVER教學第四天筆記 1
SQL SERVER教學第四天筆記


(4) 計算出 SalesComplete 表格上每一筆銷售的營業稅金額

SELECT *
,[Amount]*5/100 AS 營業稅
FROM [FruitSalesData].[dbo].[SalesComplete]

SQL SERVER教學第四天筆記 3
SQL SERVER教學第四天筆記

Aggregation Function (聚合函數)

Aggregation 也稱爲欄位函數(Column Functions)可以進行選取記錄欄位值的筆數、平均、範圍等統計函數,以便提供進一步欄位資料的分析結果。

常見的聚合函數

函數說明
SUM加總
COUNT計數
AVG平均
MAX最大值
最MIN最小值
STDEV標準差

實戰練習

SQL SERVER教學第四天筆記 5
SQL SERVER教學第四天筆記

GROUP BY(群組查詢)

簡單來説就是 Excel 的樞紐分析表 –

練習:我要找出每個業務員的銷售總額

SELECT sum(amount) AS 銷售總額 , name as 業務員
FROM [FruitSalesData].[dbo].[SalesComplete]
GROUP BY name

SQL SERVER教學第四天筆記 7
SQL SERVER教學第四天筆記

練習:哪一種水果的銷量最好?

SELECT product as 水果,
sum(amount) as 銷售總額
FROM [FruitSalesData].[dbo].[SalesComplete]
group by product
order by 銷售總額 DESC

SQL SERVER教學第四天筆記 9
SQL SERVER教學第四天筆記

HAVING 做進一步的的過濾

用了group by後,會無法針對 GROUP BY 分類之後的結果進行進一步的過濾

練習 – 希望抓到銷售總額20W以上,並且銷售額1000萬以下的銷售員

SELECT name,
sum(amount) as 銷售總額
FROM [FruitSalesData].[dbo].[SalesComplete]
where amount > 200000
group by name

–以上為第一層條件過濾,首先把總銷售額20W以上的銷售員過濾出來

having sum(amount) < 10000000
–上面having為第二層條件過濾,再來把銷售總額1000W以下的銷售員過濾出來

多層次的分群(GROUP BY)

SELECT name,
Product,
count(name) as 銷售個數,
sum(amount) as 銷售總額
FROM [FruitSalesData].[dbo].[SalesComplete]
–where amount > 200000
group by name, Product
order by 銷售總額 DESC

SQL SERVER教學第四天筆記 11
SQL SERVER教學第四天筆記

課後練習

1、哪一個客戶跟公司採購了最多水果?

select top(1) sum(amount) as 銷售總額,
CustomerName as 客戶
from [FruitSalesData].[dbo].[SalesComplete]
group by CustomerName
order by 銷售總額 DESC

2、計算個別客戶的銷售總額,以及銷售數量

select sum(amount) as 銷售總額,
CustomerName as 客戶,
count(product) as 銷售個數
from [FruitSalesData].[dbo].[SalesComplete]
group by CustomerName, product
order by 銷售總額 DESC