天天看點

Mysql學習筆記06——分組查詢細枝末節格式篩選條件分類示例

細枝末節

1. GROUP BY後的集必須出現在SELECT後

2. 分組函數做條件肯定放在HAVING中

3. 盡量使用WHERE篩選,性能高

4. GROUP BY支援單字段分組,多字段分組,表達式或函數分組

5. GROUP BY使用多字段分組時,無順序要求

格式

SELECT

    分組,列(要求出現在GROUP BY後面)

FROM

    表名

[WHERE 篩選調節]

GROUP BY

    分組清單

[HAVING 篩選條件]

[ORDER BY 子句]

篩選條件分類

分組前篩選

資料源

原始表

位置

GROUP BY子句前面

關鍵字

WHERE

分組後篩選

分組後的結果集

GROUP BY子句後面

HAVING

示例

查詢哪些部門員工個數>2

/* 1. 先查詢每個部門員工個數 */

SELECT COUNT(*), dept_id

FROM emps

GROUP BY dept_id

/* 2. 根據1中的結果集,對>2條件進行篩選 */

SELECT COUNT(*),dept_id

HAVING COUNT(*)>2;

查詢每個工種有獎金的員工的最高工資>12000的工種編号和最高工資

/* 1. 先查詢每個工種有獎金的員工的最高工資及工種編号 */

SELECT MAX(salary), job_id

FROM emp

WHERE bonus IS NOT NULL

GROUP BY job_id;

/* 2. 根據1中的結果集繼續對最高工資>12000條件進行篩選 */

WHERE bons IS NOT NULL

GROUP BY job_id

HAVING MAX(salary)>12000;

查詢上司編号>102的每個上司手下的最低工資>5000的上司編号及其最低工資

/* 1. 先查詢上司編号>102的的每個上司手下的最低工資及上司編号 */

SELECT MIN(salary), mng_id

WHERE mng_id>102

GROUP BY mng_id;

/* 2. 根據1中的結果集繼續對最低工資>5000條件進行篩選 */

GROUP BY mng_id

HAVING MIN(salary)>5000;

按員工姓名的長度分組,查詢每組員工個數,篩選員工數>5的組有哪些

/* 1. 先将員工星空按長度分組,查詢每組員工個數 */

SELECT COOUNT(*), LENGTH(name)

GROUP BY LENGTH(name);

/* 2. 根據1中的結果集繼續對員工數>5條件進行篩選 */

SELECT COUNT(*), LENGTH(name)

GROUP BY LENGTH(name)

HAVING COUNT(*)>5;

繼續閱讀