让我们采取以下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
是否可以解决该问题?
答案 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