【问题标题】:Mysql group concat with counting itemsMysql group concat与计数项目
【发布时间】:2017-01-18 09:36:14
【问题描述】:

我有 2 个表,'item' 和 'propvalues',propvalues 有 property_id 和 value 列,我想要得到的是将 propvalues 分组为 property_id,并计算它们有多少相似的值。

我知道它与另一个问题相似,但我无法弄清楚如何更改它以供自己工作。如果有人擅长 mysql,请不要将其标记为重复的问题,而是尝试至少给我一些建议。我不明白当有内部选择语句时发生了什么

这是表格:

'item'
  id    category_id
   1         1
   2         1
   3         2
   4         5
   etc.

'propvalues'
  id    item_id    property_id       value
  1       1           3               'blue'
  2       1           3               'blue'
  3       1           3               'blue'
  4       1           3               'red'
  5       1           5               'blue'
  6       1           5               'red'
  7       2           5               'red'

SELECT propvalues.property_id,
GROUP_CONCAT(propvalues.value) 
FROM propvalues JOIN item ON item.id = propvalues.item_id
WHERE item.category_id = 1 || item.category_id = 2
GROUP BY propvalues.property_id

这给出了这个结果:

property_id      value
    3          blue,blue,blue,red
    5          blue,red,red

我需要这个,结果,我只想要唯一值,并计算它们:

3        blue,3|red,1
5        blue,1|red,2

有什么想法吗? 我在这里找到了一些解决方案:mysql group_concat with a count inside? 但我无法弄清楚如何改变它让自己工作。

【问题讨论】:

  • 投票作为重复关闭,因为该问题与您链接到的其他问题基本完全相同。如果您真的尝试根据您的情况实施/调整它,那么至少向我们展示您尝试了什么以及取得了什么结果。
  • 我不明白这是怎么回事,如果我不寻求帮助的话。

标签: mysql


【解决方案1】:

源自refered duplicate

SELECT property_id, GROUP_CONCAT(CONCAT(value, ',', cnt) SEPARATOR '|')
FROM (
    SELECT property_id, value, COUNT(value) AS cnt
    FROM propvalues
    JOIN item ON item.id = propvalues.item_id
        AND item.category_id IN (1, 2)
    GROUP BY property_id, value
) t
GROUP BY property_id

为了分解它,内部子查询为每个 property_id 获取许多不同的值:

+-------------+-------+-----+
| property_id | value | cnt |
+-------------+-------+-----+
|           3 | blue  |   3 |
|           3 | red   |   1 |
|           5 | blue  |   1 |
|           5 | red   |   2 |
+-------------+-------+-----+

外部主查询通过不同的 property_id 进一步聚合这些值,将值和计数连接到一个字符串 (CONCAT(value, ',', cnt)),然后连接每一行中的这些值 (GROUP_CONCAT(... SEPARATOR '|'))。

【讨论】:

  • 错误:SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“base.propvalues.item_id”;这与 sql_mode=only_full_group_by 不兼容
  • 你说得对,这不适用于 ONLY_FULL_GROUP_BY SQL 模式。现已修复。
  • 非常感谢乔!它完美地工作。我会努力学习的
猜你喜欢
  • 2017-07-25
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 2011-06-21
  • 1970-01-01
  • 2021-03-21
  • 2014-11-22
相关资源
最近更新 更多