> For the complete documentation index, see [llms.txt](https://johch3n611u.gitbook.io/c50108/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://johch3n611u.gitbook.io/c50108/ju-li-cheng-bei/201902/2019-0220-ss.md).

# 2019/0220/SS基本語法&網概line機器人

欄位跟欄位之間要用逗點隔開，類似c#\&js ; 分號

## ss基本語法

in 後面一定要接資料集合

```
--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 學號
```

報表明係必須考慮到主檔筆數可以看出別的東西&#x20;

ex.查詢明細賣出物品 但沒跟主檔對比 看不出沒賣出去的

單從教授 被選課 看不出一些東西

單從課程 被選課 也看不出來

但 從 教授 課程 被選課 就能看出 其實同一堂課有兩個教授開課，有不同學生分別選擇

子句一定要放主句後面

select from

的子句 where group by&#x20;

group by 的子句 having

where 沒有辦法查詢聚合函數 ex. where count (\*)<3   xxxxxx 錯誤

### 不能用別名 having 因為執行順序 from - > having 最後才執行 select

order by 排序 小到大 順排&#x20;

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&#x20;

```
--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
 (
 教授編號,
 課程編號,
 (教授編號, 課程編號),
 ()
 )
```

## 網概line機器人

大數據重點不再數據而是如何使用這些數據

ex.使用者搜尋大安區房價，機器人回復同時反向紀錄此刻人為大安區買房潛在客戶，以後可以推波大安區或台北市購屋資訊給此使用者。

ex.蝦皮購物使用者推薦 ... ... ...

框架式 較簡單但死板

ex.linebot

演算法式 較難 但較自然

ex.Siri
