最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

mysql中groupby與having合用注意事項分享

來源:懂視網(wǎng) 責編:小采 時間:2020-11-09 21:06:25
文檔

mysql中groupby與having合用注意事項分享

mysql中groupby與having合用注意事項分享:group by函數(shù)應該的使用應該是SELECT 列表中指定的每一列也必須出現(xiàn)在 GROUP BY 子句中,除非這列是用于聚合函數(shù),但是今天幫同事調(diào)試一個mysql中的group by函數(shù),讓我大跌眼鏡,當時感覺不可思議,然后回來做了個簡化版試驗,試驗過程如下: mysql表結
推薦度:
導讀mysql中groupby與having合用注意事項分享:group by函數(shù)應該的使用應該是SELECT 列表中指定的每一列也必須出現(xiàn)在 GROUP BY 子句中,除非這列是用于聚合函數(shù),但是今天幫同事調(diào)試一個mysql中的group by函數(shù),讓我大跌眼鏡,當時感覺不可思議,然后回來做了個簡化版試驗,試驗過程如下: mysql表結

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

mysql表結構

代碼如下:
mysql> desc t;
+——-+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————–+——+—–+———+——-+
| id | int(11) | YES | | 0 | |
| name | varchar(100) | YES | | NULL | |
| aa | varchar(45) | YES | | NULL | |
+——-+————–+——+—–+———+——-+
3 rows in set (0.01 sec)

插入數(shù)據(jù)

代碼如下:
mysql> select * from t;
+——+——+——-+
| id | name | aa |
+——+——+——-+
| 1 | aaaa | bbbb |
| 1 | 1111 | 2222 |
| 1 | 2222 | 33333 |
| 1 | 2222 | 44444 |
| 2 | 2222 | 44444 |
| 2 | 2222 | 1111 |
| 3 | 2222 | 1111 |
| 1 | 2222 | 44444 |
| 1 | 2222 | 44444 |
| 1 | 2222 | 44444 |
| 3 | 2222 | aaaa |
+——+——+——-+
11 rows in set (0.00 sec)

group by 查詢語句

代碼如下:
mysql> select id,count(1) ,aa from t group by id;
+——+———-+——-+
| id | count(1) | aa |
+——+———-+——-+
| 1 | 7 | bbbb |
| 2 | 2 | 44444 |
| 3 | 2 | 1111 |
+——+———-+——-+
3 rows in set (0.00 sec)

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

對試驗結果的說明
1、包含在group by后面的id列的count(1)統(tǒng)計數(shù)據(jù)為正確的
2、按照正常思維,aa的數(shù)據(jù)不能展示出來,可是mysql選擇了展示表中aa數(shù)據(jù)的第一條
3、上述2也是個人猜測,暫時未查到官方相關說明

mysql group by having 用法

group by就是按照不同的字段進行分組,數(shù)值可以實現(xiàn)匯總

例如數(shù)據(jù)庫中有A表,包括學生,學科,成績?nèi)齻€字段
數(shù)據(jù)庫結構為
學生 學科 成績
張三 語文 80
張三 數(shù)學 100
李四 語文 70
李四 數(shù)學 80
李四 英語 80

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

學生 成績
張三 180
李四 230

==============================================================

如果考慮having
語句寫成:
select 學生,sum(成績) from A group by 學生 having 成績=80;
得到結果就是這樣的

學生 成績
張三 80
李四 160

用having比 JOIN ON 相對好理解一些,簡單一些。

mysql中group by having 用法需要注意的事項:

GROUP BY:

group by 有一個原則,就是 select 后面的所有列中,沒有使用聚合函數(shù)的列,必須出現(xiàn)在 group by后面。

比如:
代碼如下:
select name,sum(point) from table_name

這樣sql語句會報錯,必須寫成:

代碼如下:
select name,sum(point) from table_name GROUP BY name

HAVING

把 HAVING 加入 SQL 的原因是,WHERE 無法應用于合計函數(shù),而如果沒有 HAVING,就無法測試結果條件。

代碼如下:
select name,sum(point)
from table_name GROUP BY name
HAVING sum(point)>1000

having通常和group by聯(lián)合使用.

您可能感興趣的文章:

  • 淺談mysql數(shù)據(jù)庫中的using的用法
  • Mysql之EXPLAIN顯示using filesort介紹
  • MySql中having字句對組記錄進行篩選使用說明
  • Mysql中order by、group by、having的區(qū)別深入分析
  • mysql having用法解析
  • MySQL中無GROUP BY情況下直接使用HAVING語句的問題探究
  • MySQL無GROUP BY直接HAVING返回空的問題分析
  • mysql group by having 實例代碼
  • MySQL中USING 和 HAVING 用法實例簡析
  • 聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    mysql中groupby與having合用注意事項分享

    mysql中groupby與having合用注意事項分享:group by函數(shù)應該的使用應該是SELECT 列表中指定的每一列也必須出現(xiàn)在 GROUP BY 子句中,除非這列是用于聚合函數(shù),但是今天幫同事調(diào)試一個mysql中的group by函數(shù),讓我大跌眼鏡,當時感覺不可思議,然后回來做了個簡化版試驗,試驗過程如下: mysql表結
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top