我需要找到具有最大类别的记录[重复]

Posted

技术标签:

【中文标题】我需要找到具有最大类别的记录[重复]【英文标题】:i need to find records which have max categories [duplicate] 【发布时间】:2021-05-19 12:45:15 【问题描述】:
id category
1 eat,drink
2 drink,cup
3 eat,take
4 tea,eat

我需要订购类别列重复的最大类别数量的记录,ex-eat重复3次,然后是第一个订单,然后是饮料,然后是茶或杯子。 提前谢谢..

【问题讨论】:

你应该修复你的数据模型。在分隔字符串中存储多个值不是 SQL 存储数据的方式。 当你像这样存储逗号分隔的列表时,你会发现many queries become hard to solve。如果您将类别存储为单独的表格,每个类别一行,它们会更容易。 感谢@GordonLinoff,但我们无法在项目中期更改流程,您有上述流程的解决方案吗? 【参考方案1】:

正如 Gordon 建议的那样,应更改数据模型以充分利用 RDBMS。但是您正在寻找的可以通过以下查询来实现:

select category,count(*) category_count from(
select t.id, j.category 
from tablename t
join json_table(
  replace(json_array(t.category ), ',', '","'),
  '$[*]' columns (category  varchar(50) path '$')
) j
)t
group by category
order by count(*) desc;

输出:

【讨论】:

以上是关于我需要找到具有最大类别的记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 EF Core Code-First 创建具有子类别的类别表? [复制]

mysql - 为每组分组的 SQL 结果获取具有最大值的记录[重复]

从具有类别和子类别的表中进行选择的 SQL 查询

在字典中查找最大值[重复]

如果具有指定值的同一表中存在重复键,则 MYSQL DELETE 行

SQL Server如何优化获取具有最大值的相关记录的查询