假设有一张扎染T恤的桌子......例如,有些衬衫有多种颜色,列为字符串,逗号分隔。例如blue,yellow,red,purple
或green,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
答案 0 :(得分: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)
是一个非常好的诀窍。
答案 1 :(得分:0)
这样的事情可能就是你要找的东西:
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
答案 2 :(得分:0)
假设你的颜色字典表是COLORS
Select colors.name, count(*) from colors
Join yourtable t on Instr(t.color,colors.name)>0
Group by colors.name