Mysql-DBA--20220526 GROUP BY語句
阿新 • • 發佈:2022-05-26
1、guroup by
2、group by 兩個欄位(dbt3)
3、引數tmp_table_size,可以優化 group by 語句
4、引數tmp_table_size,預設16M
5、可以檢視 created_temp_tables和created_tmp_disk_tables,來確定是否需要優化group by語句
6、可以通過flush status,然後再執行select語句,來判斷是否需要優化引數
7、建議將tmp_table_size設定成32M
8、count(1)、count(a)、count(*)的區別
- count(1) = count(*)
- count(a)表示,a列不為null的總條數
- count(1) = count(2) = count(3) = count(100) = count(*)
9、count(1) 代表什麼?
- 同理,count(100)也是這個意思。
10、HAVING的用法舉例
11、where語句和having語句的區別
- 第二個語句,o_orderDATE放在having語句中,會報錯。
- 第二個select語句,可以改成如下(不要用o_orderDATE,改成month,就可以了。)
- 執行結果如下:
-
第一個語句和第二個語句的執行效率,有很大差別。
- 第一個:0.00sec,第二個:3.13sec
-
注意:having後面除了聚合函式,也可以用別的列(在select中出現的列)為條件。
12、在select中出現了group by欄位以外的非聚合的欄位,mysql5.7中會報錯。
- 注意:但在mysql5.6中不報錯,而是隨機出現一個值。
-
這裡會牽涉到一個引數:sql_mode
- mysql5.7中,sql_mode中會有一個:ONLY_FULL_GROUP_BY
- mysql5.6中,sql_mode沒有:ONLY_FULL_GROUP_BY
- 建議:在my.cnf中,把sql_mode改成嚴格模式。
13、group_cancat 聚合函式
- 用冒號 區分。
- 還可以用order by 排序
- 可以倒序 desc
- separator 要放在最後。
14、group_concat舉例
- 改進版的sql語句:
- 改進版sql語句的執行結果: