【问题标题】: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,但我们无法在项目中期更改流程,您有上述流程的解决方案吗?

标签: mysql sql sql-order-by categories


【解决方案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;

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多