国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL8.0新特征--Group by

2024-07-24 12:34:59
字體:
供稿:網(wǎng)友
  Group by  語句用于結(jié)合聚合函數(shù)(如count,sum,avg,max,min),根據(jù)一個或多個列對結(jié)果集進行分組。
 
  (1)去掉重復(fù)值:根據(jù)group by后面的關(guān)鍵字只顯示一行結(jié)果;
 
  (2)mysql5.7默認開啟參數(shù)ONLY_FULL_GROUP_BY,表示完全group by,即select后面跟的列g(shù)roup by后面也必須有,但是group by后面跟的列,select后面不一定需要出現(xiàn);
 
  mysql> select @@version;
  +-----------+
  | @@version |
  +-----------+
  | 8.0.13    |
  +-----------+
  1 row in set (0.00 sec)
 
  mysql> show variables like '%sql_mode%';
  +---------------+-----------------------------------------------------------------------------------------------------------------------+
  | Variable_name | Value                                                                                                                 |
  +---------------+-----------------------------------------------------------------------------------------------------------------------+
  | sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
  +---------------+-----------------------------------------------------------------------------------------------------------------------+
  1 row in set (0.01 sec)
 
  mysql> select * from t_group;
  +--------+---------+------------+------------+
  | emp_no | dept_no | from_date  | to_date    |
  +--------+---------+------------+------------+
  |  22744 | d006    | 1986-12-01 | 9999-01-01 |
  |  24007 | d005    | 1986-12-01 | 9999-01-01 |
  |  30970 | d005    | 1986-12-01 | 2017-03-29 |
  |  31112 | d002    | 1986-12-01 | 1993-12-10 |
  |  40983 | d005    | 1986-12-01 | 9999-01-01 |
  |  46554 | d008    | 1986-12-01 | 1992-05-27 |
  |  48317 | d008    | 1986-12-01 | 1989-01-11 |
  |  49667 | d007    | 1986-12-01 | 9999-01-01 |
  |  50449 | d005    | 1986-12-01 | 9999-01-01 |
  |  10004 | d004    | 1986-12-01 | 9999-01-01 |
  +--------+---------+------------+------------+
  10 rows in set (0.00 sec)
 
  mysql> select dept_no,count(*) from t_group group by dept_no;
  +---------+----------+
  | dept_no | count(*) |
  +---------+----------+
  | d006    |        1 |
  | d005    |        4 |
  | d002    |        1 |
  | d008    |        2 |
  | d007    |        1 |
  | d004    |        1 |
  +---------+----------+
  6 rows in set (0.00 sec)
 
  mysql> select dept_no,emp_no,count(*) from t_group group by dept_no;
  ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'employees.t_group.emp_no' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
 
  關(guān)閉ONLY_FULL_GROUP_BY參數(shù)后,不報錯,但是結(jié)果是不完全group by;
  mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
  Query OK, 0 rows affected (0.01 sec)
 
  mysql> select dept_no,emp_no,count(*) from t_group group by dept_no;
  +---------+--------+----------+
  | dept_no | emp_no | count(*) |
  +---------+--------+----------+
  | d006    |  22744 |        1 |
  | d005    |  24007 |        4 |
  | d002    |  31112 |        1 |
  | d008    |  46554 |        2 |
  | d007    |  49667 |        1 |
  | d004    |  10004 |        1 |
  +---------+--------+----------+
  6 rows in set (0.00 sec)
  (3)mysql5.7group by 默認還有排序功能,8.0默認只分組不排序,需要加order by才排序,這點可以從執(zhí)行結(jié)果是否有Using filesort來判斷
 
  mysql> select @@version;
  +-----------+
  | @@version |
  +-----------+
  | 8.0.13    |
  +-----------+
  1 row in set (0.00 sec)
 
  mysql> select dept_no,count(*) from t_group group by dept_no;
  +---------+----------+
  | dept_no | count(*) |
  +---------+----------+
  | d006    |        1 |
  | d005    |        4 |
  | d002    |        1 |
  | d008    |        2 |
  | d007    |        1 |
  | d004    |        1 |
  +---------+----------+
  6 rows in set (0.00 sec)
 
  mysql> desc select dept_no,count(*) from t_group group by dept_no;
  +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-----------------+
  | id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra           |
  +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-----------------+
  |  1 | SIMPLE      | t_group | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   10 |   100.00 | Using temporary |
  +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-----------------+
  1 row in set, 1 warning (0.00 sec)
 
 
  root@localhost [testdb]>select @@version;
  +------------+
  | @@version  |
  +------------+
  | 5.7.16-log |
  +------------+
  1 row in set (0.00 sec)
 
  root@localhost [testdb]>select dept_no,count(*) from t_group group by dept_no;
  +---------+----------+
  | dept_no | count(*) |
  +---------+----------+
  | d002    |        1 |
  | d004    |        1 |
  | d005    |        4 |
  | d006    |        1 |
  | d007    |        1 |
  | d008    |        2 |
  +---------+----------+
  6 rows in set (0.00 sec)
 
  root@localhost [testdb]>desc select dept_no,count(*) from t_group group by dept_no;
  +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
  | id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                           |
  +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
  |  1 | SIMPLE      | t_group | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   10 |   100.00 | Using temporary; Using filesort |
  +----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+---------------------------------+
  1 row in set, 1 warning (0.00 sec)
  (4) group by是否能排序會直接影響分頁查詢結(jié)果
 
  8.0.13版本
  mysql> select dept_no,count(*) from t_group group by dept_no limit 1;
  +---------+----------+
  | dept_no | count(*) |
  +---------+----------+
  | d006    |        1 |
  +---------+----------+
  1 row in set (0.01 sec)
 
  5.7.16版本:
  root@localhost [testdb]>select dept_no,count(*) from t_group group by dept_no limit 1;
  +---------+----------+
  | dept_no | count(*) |
  +---------+----------+
  | d002    |        1 |
  +---------+----------+
  1 row in set (0.00 sec)
  8.2.1.15 GROUP BY Optimization
 
  MySQL 5.7有關(guān)group by說明的片段如下:
 
  In MySQL, GROUP BY is used for sorting, so the server may also apply ORDER BY optimizations to grouping. However, relying on implicit or explicit GROUP BY sorting is deprecated. See Section 8.2.1.14, “ORDER BY Optimization”.

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 江山市| 铜川市| 水富县| 新河县| 怀宁县| 威信县| 巴彦县| 安龙县| 博客| 巴中市| 姜堰市| 乌拉特中旗| 余江县| 明溪县| 华宁县| 南京市| 泾川县| 崇阳县| 东乌珠穆沁旗| 盘山县| 东平县| 灵丘县| 浦北县| 凌云县| 遂川县| 万载县| 高平市| 三明市| 西吉县| 保康县| 安远县| 夏津县| 油尖旺区| 贺州市| 陈巴尔虎旗| 潍坊市| 鸡泽县| 湖北省| 武隆县| 龙江县| 柳河县|