sql计数开始的行的频率

时间:2017-08-08 23:30:22

标签: sql postgresql count group-by

让我们采取以下dataframe

     Name
    ==================
    'Samsung Galaxy 3'
    'Samsung Galaxy 4'
    'Samsung Galaxy 4'
    'Samsung Galaxy 7'
    'ZTE'
    'ZTE'
    'Motorola'
    'Motorola'
    'Iphone'
    'Iphone'
    'Iphone'

出于某种原因,我想通过仅通过Iphone和以三星开始的手机(无论型号如何)进行分组来计算。

我试着这样做:

SELECT Name, count(Name)
FROM dataframe 
WHERE dataframe LIKE '%Samsung' OR dataframe LIKE '%Iphone'
GROUP BY Name

显然我得到了

  Name                count(Name)
 ==================|================
'Samsung Galaxy 3' |  1
'Samsung Galaxy 4' |  2
'Samsung Galaxy 7' |  1
'Iphone'           |  3

但我想要的是将所有三星分组。输出应该看起来像

  Name                count(Name)
     ==================|================
    'Samsung Galaxy'   |  4
    'Iphone'           |  3

是否可以解决该问题?

2 个答案:

答案 0 :(得分:3)

我想你想要:

SELECT (CASE WHEN Name LIKE 'Samsung%' then 'Samsung'
             WHEN Name LIKE 'Iphone%' then 'Iphone'
             ELSE 'other'
        END) as which, COUNT(*)
FROM dataframe 
WHERE name LIKE 'Samsung%' OR name LIKE 'Iphone%'
GROUP BY which;

答案 1 :(得分:1)

或者可能稍微灵活一点,假设您想要摆脱世代号,但保留制造商和手机类型,您可以使用最后一个空格的索引来改变字符串('')并分组结果。

std::string

SQL Fiddlehttp://sqlfiddle.com/#!17/a915e/10/0