我正在寻找以下问题的解决方案:
SELECT CASE WHEN p.value LIKE '%foo%' THEN 'foos'
WHEN p.value LIKE '%bar%' THEN 'bars'
WHEN p.value LIKE '%bakar%' THEN 'bakars'
ELSE p.value END as value,
COUNT(*) as count FROM table_a p GROUP BY value
Run Code Online (Sandbox Code Playgroud)
值类似于:
foo, bar, foo and bar, bakar, bakarbar, foobar
Run Code Online (Sandbox Code Playgroud)
此查询的结果是:
value count
foos 3
bars 2
bakars 1
Run Code Online (Sandbox Code Playgroud)
此代码成功计算出现次数,但CASE在第一次匹配时停止.有没有办法做到这一点?
value count
foos 3
bars 4
bakars 2
Run Code Online (Sandbox Code Playgroud)
UNION如果要在每个字符串中计数不止一次,则可以使用:
SELECT 'foos' as value, count(*)
FROM YourTable
WHERE p.value LIKE '%foo%'
UNION ALL
SELECT 'bars' as value, count(*)
FROM YourTable
WHERE p.value LIKE '%bar%'
UNION ALL
SELECT 'bakars' as value, count(*)
FROM YourTable
WHERE p.value LIKE '%bakar%'
Run Code Online (Sandbox Code Playgroud)
在单个case表达式 no 中,您无法精确地实现您想要的结果,因为case在第一个匹配处停止。
您需要有单独的case表达式或if()函数调用才能实现预期结果。如果您不介意将结果放在不同的列中,则可以使用条件计数:
select count(if(p.value LIKE '%foo%',1,null)) as foos,
...
from table_a p
Run Code Online (Sandbox Code Playgroud)
如果您坚持在同一列中接收计数,请使用union:
select 'foos' as `value`, count(*) from table_a where table_a.value LIKE '%foo%'
union
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |