【问题标题】:How to use group by in a case where key values are stored in single cell using commas如何在使用逗号将键值存储在单个单元格中的情况下使用 group by
【发布时间】:2019-01-29 17:04:06
【问题描述】:

我有一个案例,我有一个表事件。事件可能属于类别表中定义的各种类别(许多)。事件表包含一个列类别,其中事件所属类别的 id 存储在以逗号分隔的单个 varchar 字段中。例如。 2,5,18。在这种情况下,我可以/如果可以,我该如何逐个使用组。我需要根据类别计算事件。但是没有为类别定义唯一的关键字段。 例如类别表

id   categoryname

1     music

2     dance

3     some other

事件表

id   eventname         category

1     dance plus        1,2

2     xyz got talent    1,3

我希望根据类别计算事件数量并期望结果为:

count    category

2         music

1         dance

1         some other

【问题讨论】:

  • 发布样本输入和预期输出。
  • 首先尝试将您的值 2,5,18, .... 拆分为多行。然后将计数函数应用于这些行。无论如何,您能提供示例数据和预期输出吗?
  • @PhamX.Bach 我做到了,请看一下
  • @SalmanA 请看一下
  • 有什么理由这样存储数据吗?使用规范化的表结构,您可以避免很多问题

标签: mysql sql database aggregate


【解决方案1】:

仅使用FIND_IN_SET 的类别表中的事件:

SELECT categories.id, categories.categoryname, COUNT(*)
FROM categories
JOIN events ON FIND_IN_SET(categories.id, events.category) > 0
GROUP BY categories.id, categories.categoryname

如果你想包含 0 个事件的类别:

SELECT categories.id, categories.categoryname, COUNT(events.id)
FROM categories
LEFT JOIN events ON FIND_IN_SET(categories.id, events.category) > 0
GROUP BY categories.id, categories.categoryname

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多