1. 程式人生 > 其它 >Mysql-DBA--20220526 GROUP BY語句

Mysql-DBA--20220526 GROUP BY語句

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語句的執行結果: