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,78
或 44,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 “group by ”与"order by"的研究--分类中最新的内容