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