MySQL - 如何GROUP BY具有条件的列

时间:2011-07-28 02:15:24

标签: mysql aggregate-functions

我试过这个,但找不到类似的东西。大多数问题都是关于在分组语句中使用条件。

我有一个包含'subject'和'content'列的表。我想在'内容'中计算银行名称的实例。

如果我执行以下操作,我会得到我的期望:每条记录都有一行,有些是“BofA”,有些是“USAA”,大多数是“其他”。

select
case
    when content like '%bank of america%' then "BofA"
    when content like '%usaa%' then "USAA"
    else "Other"
end as 'FI'
from topics

结果如下:

FI
Other
Other
BofA
Other
Other
USAA
Other
...

好的,好的。但是如果我尝试按FI进行count()和分组:

select
case
    when content like '%bank of america%' then "BofA"
    when content like '%usaa%' then "USAA"
    else "Other"
end as 'FI',
count(*)

from topics

group by 'FI'

结果:

FI      | count(*)
Other   | 43203

我想要的是这样的:

FI      | count(*)
BofA    | 1298
USAA    | 701
Other   | 41134

我无法弄清楚我做错了什么。我知道我可以通过几种不同的方式做到这一点,但看起来这应该是有效的......我也对其他方法持开放态度。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

看起来它应该有效。但是,你可以试试这个:

select fi,count(*) from 
(
  select
  case
    when content like '%bank of america%' then "BofA"
    when content like '%usaa%' then "USAA"
    else "Other"
  end as fi
  from topics
)
group by fi