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

首頁 > 數據庫 > MySQL > 正文

mysql中group by用法與having合用注意事項

2024-07-24 12:37:34
字體:
來源:轉載
供稿:網友

在mysql中group by分組查詢我們經常會用到,并且還同時會與having合用,下面我介紹group by用法與having合用注意事項,希望此教程對各位朋友有所幫助。

group by函數應該的使用應該是SELECT 列表中指定的每一列也必須出現在 GROUP BY 子句中,除非這列是用于聚合函數,但是今天幫同事調試一個mysql中的group by函數,讓我大跌眼鏡,當時感覺不可思議,然后回來做了個簡化版試驗,試驗過程如下:

mysql表結構,代碼如下:

  1. mysql> desc t; 
  2. +——-+————–+——+—–+———+——-+ 
  3. | Field | Type | Null | Key | Default | Extra | 
  4. +——-+————–+——+—–+———+——-+ 
  5. | id | int(11) | YES | | 0 | | 
  6. name | varchar(100) | YES | | NULL | | 
  7. | aa | varchar(45) | YES | | NULL | | 
  8. +——-+————–+——+—–+———+——-+ 
  9. rows in set (0.01 sec) 

插入數據,代碼如下:

  1. mysql> select * from t; 
  2. +——+——+——-+ 
  3. | id | name | aa | 
  4. +——+——+——-+ 
  5. | 1 | aaaa | bbbb | 
  6. | 1 | 1111 | 2222 | 
  7. | 1 | 2222 | 33333 | 
  8. | 1 | 2222 | 44444 | 
  9. | 2 | 2222 | 44444 | 
  10. | 2 | 2222 | 1111 | 
  11. | 3 | 2222 | 1111 | 
  12. | 1 | 2222 | 44444 | 
  13. | 1 | 2222 | 44444 | 
  14. | 1 | 2222 | 44444 | 
  15. | 3 | 2222 | aaaa | 
  16. +——+——+——-+ 
  17. 11 rows in set (0.00 sec) 

group by 查詢語句,代碼如下:

  1. mysql> select id,count(1) ,aa from t group by id; 
  2. +——+———-+——-+ 
  3. | id | count(1) | aa | 
  4. +——+———-+——-+ 
  5. | 1 | 7 | bbbb | 
  6. | 2 | 2 | 44444 | --Vevb.com 
  7. | 3 | 2 | 1111 | 
  8. +——+———-+——-+ 
  9. rows in set (0.00 sec) 

在本試驗中,一共select id,count(1),aa,結果group by按照規則,除了聚合函數(count(1))外,其他兩列(id,aa)都應該包含在group by中,可是試驗只是包含了id。

對試驗結果的說明

1、包含在group by后面的id列的count(1)統計數據為正確的

2、按照正常思維,aa的數據不能展示出來,可是mysql選擇了展示表中aa數據的第一條

3、上述2也是個人猜測,暫時未查到官方相關說明

mysql group by having 用法

group by就是按照不同的字段進行分組,數值可以實現匯總,例如數據庫中有A表,包括學生,學科,成績三個字段,數據庫結構為:

  1. 學生 學科 成績  
  2. 張三 語文 80  
  3. 張三 數學 100  
  4. 李四 語文 70  
  5. 李四 數學 80  
  6. 李四 英語 80 

那么 ,select 學生,sum(成績) from A group by 學生;得到如下結果:

  1. 學生 成績  
  2. 張三 180  
  3. 李四 230 

如果考慮having,語句寫成:

select 學生,sum(成績) from A group by 學生 having 成績=80;

得到結果就是這樣的:

  1. 學生 成績  
  2. 張三 80  
  3. 李四 160 

用having比 JOIN ON 相對好理解一些,簡單一些,mysql中group by having 用法需要注意的事項:

GROUP BY:group by 有一個原則,就是 select 后面的所有列中,沒有使用聚合函數的列,必須出現在 group by后面,比如如下代碼:

select name,sum(point) from table_name

這樣sql語句會報錯,必須寫成如下代碼:

select name,sum(point) from table_name GROUP BY name

HAVING

把 HAVING 加入 SQL 的原因是,WHERE 無法應用于合計函數,而如果沒有 HAVING,就無法測試結果條件,代碼如下:

  1. select name,sum(point)  
  2. from table_name GROUP BY name  
  3. HAVING sum(point)>1000 

having通常和group by聯合使用.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 腾冲县| 潼南县| 晋江市| 淄博市| 博爱县| 广饶县| 平安县| 紫金县| 尉氏县| 犍为县| 独山县| 吕梁市| 江油市| 麻江县| 水城县| 吉林市| 温泉县| 潼南县| 鸡泽县| 砚山县| 清徐县| 万源市| 沈阳市| 新龙县| 芦山县| 华宁县| 凯里市| 聂拉木县| 襄汾县| 寻甸| 紫阳县| 山阳县| 赣州市| 安阳县| 洞头县| 盐池县| 长海县| 高清| 陈巴尔虎旗| 江川县| 宣汉县|