之前用group by分組后一直困惑怎么把分組后的數(shù)據(jù)拿到,因?yàn)榉纸M后同一組的只有一條數(shù)據(jù),最后發(fā)現(xiàn)了group_concat函數(shù)。記錄一下,以后能用。
語(yǔ)法:group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
說(shuō)明:通過(guò)使用distinct可以排除重復(fù)值(去重);如果希望對(duì)結(jié)果中的值進(jìn)行排序,可以使用order by子句;separator是一個(gè)字符串值,缺省為一個(gè)逗號(hào)。[]中的就是選填的
$list = self::where("uid",$uid)
->field('FROM_UNIXTIME(add_time,"%Y-%m") as time,group_concat(id SEPARATOR ",") ids')
->whereTime('add_time','between',[$start_time,$end_time])
->group('time')
->select()->toArray();
上面代碼是用年月分組,然后把id連接顯示,結(jié)果如下
Array
(
[0] => Array
(
[time] => 2023-02
[ids] => 4,5,6,7,13,14,15,16,17,18,28,29,30
)
)
這樣就知道2023年2月份的相關(guān)記錄的id了
參考資料:
數(shù)據(jù)庫(kù)數(shù)據(jù)
+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
可以用下面的SQL測(cè)試一下效果
1、以id分組,把name字段的值打印在一行,逗號(hào)分隔(默認(rèn))
select id,group_concat(name) from aa group by id;
select id,group_concat(name separator ';') from aa group by id;
2、以id分組,把去冗余的name字段的值打印在一行,name(去重復(fù))
select id,group_concat(distinct name) from aa group by id;
3、以id分組,把name字段的值打印在一行,逗號(hào)分隔,以name排倒序
select id,group_concat(name order by name desc) from aa group by id;
另外個(gè)函數(shù):concat()
語(yǔ)法:concat(str1, str2,...),返回結(jié)果為連接參數(shù)產(chǎn)生的字符串,如果有任何一個(gè)參數(shù)為null,則返回值為null。
1、select concat (id, name, score) as info from tt2;
我們可以加一個(gè)逗號(hào)作為分隔符:
2、select concat (id,',', name,',', score) as info from tt2;
concat_ws()函數(shù):功能:和concat()一樣,將多個(gè)字符串連接成一個(gè)字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)
語(yǔ)法:concat_ws(separator, str1, str2, ...)
說(shuō)明:第一個(gè)參數(shù)指定分隔符。需要注意的是分隔符不能為null,如果為null,則返回結(jié)果為null。
select concat_ws(',',id, name, score) as info from tt2;
注意:把分隔符指定為null,結(jié)果全部變成了null:
select concat_ws(null,id, name, score) as info from tt2;
結(jié)合應(yīng)用:
我們要查詢(xún)以name分組的所有組的id和score:按id排序,拼接id和score
select name,group_concat(concat_ws('-',id,score) order by id) from tt2 group by name

我們要試試以name分組的所有組的id和score:按id倒序,拼接id和score,用‘;’做分隔符
select name,group_concat(concat_ws('-',id,score) order by id desc separator ';') from tt2 group by name
借鑒文章
https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-445913.html
https://blog.csdn.net/qq_32907195/article/details/106852951文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-445913.html
到了這里,關(guān)于group by聚合分組后如何獲取分組數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!