MYSQL GROUP_CONCAT函數(shù)
lconcise關(guān)注
0.4142018.09.15 14:05:42字?jǐn)?shù) 293閱讀 9,979
mysql 中 group_concat() 函數(shù) 完整語法
group_concat([DISTINCT] 要連接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
例子一:
創(chuàng)建數(shù)據(jù)庫,并插入數(shù)據(jù)
--------------------------------Table structureforscore------------------------------DROP TABLE IF EXISTS`score`;CREATE TABLE`score`(`id`int(11)NOT NULL,`score`varchar(255)DEFAULT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;--------------------------------Records of score------------------------------INSERT INTO`score`VALUES('1','10');INSERT INTO`score`VALUES('1','20');INSERT INTO`score`VALUES('1','30');INSERT INTO`score`VALUES('2','20');INSERT INTO`score`VALUES('2','30');INSERT INTO`score`VALUES('2','40');INSERT INTO`score`VALUES('3','30');INSERT INTO`score`VALUES('3','40');INSERT INTO`score`VALUES('3','40');
效果如下圖:
捕獲.PNG
執(zhí)行如下sql 語句:
SELECT id,GROUP_CONCAT(score) from score GROUP BY id;
捕獲.PNG
SELECT id,GROUP_CONCAT(DISTINCT score) from score GROUP BY id;
捕獲.PNG
SELECT id,GROUP_CONCAT(DISTINCT score ORDER BY score DESC) from score GROUP BY id;
捕獲.PNG
SELECT id,GROUP_CONCAT(DISTINCT score ORDER BY score DESC SEPARATOR ";") from score GROUP BY id;
捕獲.PNG
例子二:
創(chuàng)建表,并插入數(shù)據(jù)
--------------------------------Table structureforgrade1------------------------------DROP TABLE IF EXISTS`grade1`;CREATE TABLE`grade1`(`id`int(11)NOT NULL AUTO_INCREMENT,`stuName`varchar(22)DEFAULT NULL,`course`varchar(22)DEFAULT NULL,`score`int(11)DEFAULT NULL,PRIMARY KEY(`id`))ENGINE=InnoDB AUTO_INCREMENT=10DEFAULT CHARSET=utf8;--------------------------------Records of grade1------------------------------INSERT INTO`grade1`VALUES('1','張三','語文','91');INSERT INTO`grade1`VALUES('2','張三','數(shù)學(xué)','90');INSERT INTO`grade1`VALUES('3','張三','英語','87');INSERT INTO`grade1`VALUES('4','李四','語文','79');INSERT INTO`grade1`VALUES('5','李四','數(shù)學(xué)','95');INSERT INTO`grade1`VALUES('6','李四','英語','80');INSERT INTO`grade1`VALUES('7','王五','語文','77');INSERT INTO`grade1`VALUES('8','王五','數(shù)學(xué)','81');INSERT INTO`grade1`VALUES('9','王五','英語','89');
捕獲.PNG
問題 查詢語數(shù)外 三門課的最低分,還有哪個學(xué)生考的
方法一:
SELECT course,SUBSTRING_INDEX((GROUP_CONCAT(stuName ORDER BY score ASC)),',',1) as studentName,MIN(score) from grade1 GROUP BY course;
SELECTcourse,SUBSTRING_INDEX((GROUP_CONCAT(stuNameORDERBYscoreASC)),',',1)ASstudentName,MIN(score)FROMgrade1GROUPBYcourse;
解析:
根據(jù)課程course 分組(group by),min() 函數(shù) 求該course 下的最低分
group_concat() 函數(shù) 根據(jù)分?jǐn)?shù)從高到底 拼接 stuName
substring_index() 函數(shù) 拆分出 分?jǐn)?shù)最低 stuName
數(shù)據(jù)量大的情況 不推薦使用該方法
方法二:
SELECT a.course,a.stuName,a.score from grade1 a where (a.score,a.course) in (SELECT MIN(score),course from grade1 GROUP BY course);
SELECT? ? a.course,a.stuName,a.scoreFROM? ? grade1 aWHERE(a.score,a.course)IN(SELECTMIN(score),course? ? ? ? FROM? ? ? ? ? ? grade1? ? ? ? GROUP BY? ? ? ? ? ? course);
捕獲.PNG
解析:
min(score) group by course 可以獲取到 course 的最低分,而且知道 course,socre 也可以確定是哪個學(xué)生。