1. 程式人生 > >MySQL中的group by 注意事項

MySQL中的group by 注意事項

1、建表test_group_by

create table test_group_by(
	id TINYINT not null,
    uname varchar(10) ,
	age TINYINT DEFAULT 0,
    class TINYINT DEFAULT 1,
    PRIMARY key(id)
)engine=INNODB

2、插入資料:

INSERT INTO test_group_by
VALUES
	(1,'111',22,1),
	(2,'222',42,1),
	(4,'444',20,2),
	(3,'333',20,2),
	(0,'000',11,3),
	(6,'666',33,3)


3、例項

      3.1、group by col1的說明:col1列可以不在select列當中,下面的sql會給出示例。

      3.2、select的列如果不在group by的列當中,並且根據group by 後面的列分組後任意列不能有唯一值,則這些不包含在group by 中的列都應該使用max或者min聚合函式。

如果按照class分組,查詢每個class分組下age的最大值,sql如下:

SELECT
	id,
	uname,
	max(age)AS age
FROM
	test_group_by
GROUP BY
	class;

MySQL會提示錯誤如下:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mybatis.test_group_by.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

其它列情況一樣的處理,正確的sql應該為:

SELECT
	max(id),
	max(uname),
	max(age)AS age
FROM
	test_group_by
GROUP BY
	class;

      3.3、select的列如果不在group by的列當中,並且根據group by 後面的列分組後任意列均有唯一值,則這些不包含在group by 中的列可以不使用max或者min聚合函式。

如果按照id分組,sql如下:

SELECT
	id,
	uname,
	max(age),
	class
FROM
	test_group_by
GROUP BY
	id;


4、如果沒有通過order by子句顯示地指定排序列,當查詢使用group by子句的時候,結果集會自動按照分組的欄位進行排序。如果不關心結果集的排序,而這種預設排序又導致了需要檔案排序,則可以使用order  by  null ,讓MySQL不再進行檔案排序。也可以在group  by子句中直接使用desc 或者asc 關鍵字,使分組的結果按需要的方向排序。


相關推薦

MySQLgroup by 注意事項

1、建表test_group_by: create table test_group_by( id TINYINT not null, uname varchar(10) , age T

OCP-1Z0-051 第140題 子查詢使用GROUP BY注意事項

Examine the structure of the PRODUCTS table:Name             Null             Type PROD_ID         NOT NULL        NUMBER(4) PROD_NAME                     

mysqlgroup by和order by同時使用無效的替代方案

前言 最近一年由於工作需要大部分使用的都是NoSql資料庫,對關係型資料庫感覺越來越陌生,一個由group by和order by 引發的血案由此而生。在此做個記錄,以備不時之需。 需求(得到所有barCode的最新的一條資料) 首先,看一下整體的表結構。 

mysqlgroup by和order by同時使用無效 group_concat

                                          &nb

SQL SERVER2000 group by 注意事項

1).在select 子句的欄位列表中,除了聚集函式外,其他所出現的欄位一定要group by子句有定義才行,例如"GROUP BY A,B",那麼"select SUM(A),C"就有問題,因為C不在group by中,但是SUM(A)是可以的. 2).在sql serve

mysqlgroup by 的用法解析

1. group by的常規用法 group by的常規用法是配合聚合函式,利用分組資訊進行統計,常見的是配合max等聚合函式篩選資料後分析,以及配合having進行篩選後過濾。 假設現有資料庫表如下: 表user_info,id主鍵,user_id唯一

關於mysql group by , order by , where, having 語句的區別與運用

最近一直在忙著和資料庫有關的一些工作,這幾天在寫儲存過程的時候,一些mysql的語句突然感覺有些不太明白,就是group   by   ,  order   by  ,where   ,  having這些語句,這次通過一個例項來總結和歸納一下,這幾個語句的用法,僅供以後參

mysqlgroup by分組後查詢無資料補0;

mysql經常會用到Group By來進行分組查詢,但也經常會遇到一個問題,就是當有where條件時,被where條件過濾的資料不顯示了。 例如我有一組資料: 我想查詢當日領取數量和當日核銷數量;

mysqlgroup by

對於group by在mysql中的使用和Oracle的差異性很大,準確的說不光和Oracle和別的資料庫差異性一樣,這些有點不太遵循標準SQL。我們知道常規的 sql,對於group by來說一定要結合聚合函式,而且選擇的欄位除了聚合函式外,還必須在group by中出現,否則報錯,但是在mysql中擴充

MySql含有GROUP BY子句的查詢如何顯示COUNT()為0的結果

前階段工作中發現MySql含有GROUP BY子句的查詢中COUNT()為0的結果不顯示. 而針對於分組統計的此類問題,多數人(包括本人)通常會想到: SELECT PID,COUNT(1) AS SUM FROM SS WHERE FIAG = 1 GROUP BY PID

mysql 5.7高版本group by問題解決辦法

select max(user_id) as user_id,`create_time` from silence where user_id in (1, 2, 3, 4) group by user_id desc; 我使用如上語句進行查詢的時候,竟然報錯了。 Expressi

mysqlgroup by用法在5.7和5.6存在區別

http://stackoverflow.com/questions/39909261/order-by-before-group-by-in-subquery-working-in-mysql-5-5-but-not-in-mysql-5-7 http://stackov

mybatisgroup by 語句SQL報錯,原因是MySQL版本的group規則預設是:only_full_group_by

報錯資訊:......not in GROUP BY clause and contains nonaggregated column ......  which is not functionally dependent on columns in GROUP BY cla

mysqlorder bygroup by的詳細區別是詳細區別

order by 排序查詢、asc升序、desc降序示例:select * from 學生表 order by 年齡 查詢學生表資訊、按年齡的升序(預設、可預設、從低到高)排列顯示也可以多條件排序、 比如 order by 年齡,成績 desc 按年齡升序排列後

mysql精粹:group by 很好的函式

在MySQL中,你可以獲取表示式組合的連線值。你可以使用DISTINCT刪去重複值。假若你希望多結果值進行排序,則應該使用  ORDER BY子句。若要按相反順序排列,將 DESC (遞減) 關鍵詞新增到你要用ORDER BY 子句進行排序的列名稱中。預設順序為升序;可使用ASC將其明確指定。   SE

mysqlorder bygroup by的順序

mysql 中order by 與group by的順序 是: select from where group by order by 注意:group by 比order by先執行,order by不會對group by 內部進行排序,如果group by後只有一條記

mysql使用GROUP BY分組實現取前N條記錄的方法

cls class ges rom 當前 分組 實現 一個 images MySQL中GROUP BY分組取前N條記錄實現 mysql分組,取記錄 GROUP BY之後如何取每組的前兩位下面我來講述mysql中GROUP BY分組取前N條記錄實現方法。 這是測試表(也

淺析MySQL使用 GROUP BY 分組聚合與細分聚合

官方 dev 錯誤 row 一個 求平均值 時也 total 正是 1. 聚合函數(Aggregate Function)   MySQL(5.7 ) 官方文檔中給出的聚合函數列表(圖片)如下: 詳情點擊https://dev.mysql.com/doc/refman/5

MySQL使用group by 報this is incompatible with sql_mod

函數 size bee type term bst ans 查看sql 聚合函數 下面是employee表的所有數據。使用group by 分組查詢報錯this is incompatible with sql_mode=only_full_group_by查看sql_mo

MySqlGroup By數據分組

根據 round 技術 ack 使用 sele bsp inf span GROUP BY 語句根據一個或多個列對結果集進行分組。 在分組的列上我們可以使用 COUNT, SUM, AVG,等函數。 因為聚合函數通過作用於一組數據而只返回一個單個值, 因此,在SELECT