【问题标题】:mysql - count of all instances of multiple stringsmysql - 多个字符串的所有实例的计数
【发布时间】:2012-09-03 18:29:46
【问题描述】:

例如,假设有一张扎染 T 恤表……有些衬衫有多种颜色,以字符串形式列出,以逗号分隔。如blue,yellow,red,purplegreen,white,black,red

我想做一个查询来计算每种颜色出现的次数。我事先知道列中将存在哪些“颜色”。

我现在正在做的是对每个“颜色”进行单独的查询:

SELECT count(color) WHERE color LIKE '%blue%'
SELECT count(color) WHERE color LIKE '%red%'
SELECT count(color) WHERE color LIKE '%yellow%'

等等……

有没有比 15 个不同的查询更有效的方法?

示例:如果我的表要具有“blue, red, yellow”列“颜色”的值,而另一行将是 color="red, green, yellow" 等...

我正在寻找将返回的查询:

Blue    Red   Yellow  Green
  1      2      2       1

【问题讨论】:

  • 现在您已经编辑了您的问题,如果您在另一个表中没有颜色名称,这样做会有点复杂。因为在这种情况下,一个简单的连接和使用聚合函数,将简化这个

标签: mysql where-in


【解决方案1】:

假设您的断言I will know beforehand which 'colors' will exist in the column,您正在寻找的是:

SELECT
    SUM(color like '%blue%') as total_blue,
    SUM(color like '%red%') as total_red,
    (...)
    SUM(color like '%yellow%') as total_yellow
FROM
    your_table;

SUM(any boolean condition you want) 是一个非常好记的技巧。

【讨论】:

  • T H A N K Y O U !,我知道它必须是可能的。感谢您的洞察力!
【解决方案2】:

您可能正在寻找这样的东西:

SELECT
  color.name,
  COUNT(1)
FROM
  foo
LEFT JOIN
  color ON foo.color_id = color.id
GROUP BY
  color.id

如果您能给出某种关于您的数据外观的方案,那将会有所帮助。然而,这是这种情况下的基本解决方案。

如果你只是将颜色作为字符串,那就更简单了:

SELECT
  color,
  COUNT(1)
FROM
  foo
GROUP BY
  color

【讨论】:

    【解决方案3】:

    假设您为字典表着色

    Select colors.name, count(*) from colors
    Join yourtable t on Instr(t.color,colors.name)>0
    Group by colors.name
    

    【讨论】:

    • 感谢您的回答,不幸的是我不明白这一点。为什么我要加入表格?谢谢!
    • 此连接输出例如 4 行红色、蓝色、黄色、白色。因此,它将色域与颜色分开。然后你按colors.name分组并计算字典中每种颜色的COUNT。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多