MySQL 查詢語句書寫順序

MySQL 語句執行的順序,並不是按照 SQL 語句的順序。下面是示例 SQL

SELECT DISTINCT
 < select_list >
FROM
 < left_table > < join_type >
JOIN < right_table > ON < join_condition > //ON only for right_table
WHERE
 < where_condition >
GROUP BY
 < group_by_list >
HAVING
 < having_condition >
ORDER BY
 < order_by_condition >
LIMIT < limit_number >

下面是 SQL 的執行順序

FROM <left_table>
WHERE <left_where_condition>

ON <join_condition>
<join_type> JOIN <right_table>
WHERE <right_where_condition> # 確立臨時表的記錄,注意右表join和where處的條件是不同的

SELECT
DISTINCT <select_list>

GROUP BY <group_by_list> # select後的字段,可以用於group by和having
HAVING <having_condition>

ORDER BY <order_by_condition>
LIMIT <limit_number>
/**
 * 1. 先select TransTime2和TransType2, 後GROUP BY TransTime2, TerminalID, TransType2
 * 2. CASE WHEN THEN ELSE END 和IF(state1,state2,state3)語法
 * 3. SUM()和IF()函數同時用法
 */
SELECT 
    LEFT(TransTime,10) as TransTime2, 
    CASE WHEN `TransType`='CI' OR `TransType`='CO' THEN 'coin' ELSE ( CASE WHEN (`TransType`='PC' OR `TransType`='SR' OR `TransType`='VO' ) AND (TransResult = 'ff' or TransResult = '01') THEN 'card' ELSE '' END) END as TransType2,
    SUM(IF(`TransType`='VO', -TransAmount, TransAmount)) as TransType2
FROM 'table_name'
WHERE `TransTime` >= '2020-01-01 00:00:00' AND `TransTime` <= '2020-01-10 23:59:59'

GROUP BY TransTime2, TerminalID, TransType2
HAVING TransType2 != '' 
ORDER BY TransTime2 DESC

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章