MYSQL SELECT 与 GROUP。想要限制 GROUP BY 中返回元素的数量

Posted

技术标签:

【中文标题】MYSQL SELECT 与 GROUP。想要限制 GROUP BY 中返回元素的数量【英文标题】:MYSQL SELECT with GROUP. Want to limit the number of returned elements in the GROUP BY 【发布时间】:2021-02-02 19:45:48 【问题描述】:
SELECT *, GROUP_CONCAT(counts) 
FROM devicedata 
GROUP BY hour

GROUP_CONCAT(counts) 返回具有不同数量元素的行。

IE:24,54,67,44,7844,88,54

我想限制返回的元素数量,即:24,54,67 而不是得到44,78

数据表如下所示:

counts, hour
34,00
46,01
56,01
32,02
83,03 etc....

【问题讨论】:

该死的,是的。谢谢 在聚合函数旁边包含* 是完全没有意义的。如需更多帮助,请参阅meta.***.com/questions/333952/… SUBSTRING_INDEX() 在 phpmyAdmin 的 SQL 框中工作,但是当我将代码放入我的程序中时,我得到了这个 ['0',],['1',],['2',] ,['3',] 等... 数据字段为空。但在 phpmyadmin 我得到这个: ['0',65.,58.25,60.49,60.19,48.36,52.24,72.32,48.41,48.74,47.etc. 【参考方案1】:

SUBSTRING_INDEX() 不起作用,因为 GROUP_CONCAT 返回一个字符串,而 SUBSTRING_INDEX() 需要返回一个数组

所以我写了一个快速的字符串解析器,它计算“,”并附加到一个空白字符串。

【讨论】:

【参考方案2】:

使用SUBSTRING_INDEX() 返回组的子集。

SELECT *, SUBSTRING_INDEX(GROUP_CONCAT(counts), ',', 3)
FROM devicedata 
GROUP BY hour

返回逗号分隔列表中的前 3 个字段。

【讨论】:

可能是GROUP_CONCAT(counts order by counts)GROUP_CONCAT(distinct counts order by counts) 在mariadb 10.3+ 中,您可以在group_concat 中添加limit 3

以上是关于MYSQL SELECT 与 GROUP。想要限制 GROUP BY 中返回元素的数量的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL中group_concat有长度限制!默认1024

MYSQL中group_concat有长度限制!默认1024(转载)

MYSQL:SQL中Group By的使用

mysql “group by ”与"order by"的研究--分类中最新的内容

limit where group by having select

MySQL GROUP_CONCAT长度限制引发的一场灾难