sql - 在 Oracle SQL 中计算列中的单词数
问题描述
您如何根据模式对这些数据进行分组?在 SQL 中可以吗?
CREATE TABLE ABC ("NAMES" VARCHAR2(50 BYTE)) `
`INSERT INTO ABC (names) VALUES ('CA Apple 3');
INSERT INTO ABC (names) VALUES ('New Apple 4');
INSERT INTO ABC (names) VALUES ('Cra Apple 5');
INSERT INTO ABC (names) VALUES ('UK Apple 5c');
INSERT INTO ABC (names) VALUES ('Apple 6s');
INSERT INTO ABC (names) VALUES ('Apple 7');
INSERT INTO ABC (names) VALUES ('Apple x');
INSERT INTO ABC (names) VALUES ('az Apple xr');
INSERT INTO ABC (names) VALUES ('Apple xs');
INSERT INTO ABC (names) VALUES ('Motorola RIZR');
INSERT INTO ABC (names) VALUES ('eu Motorola RAZR');
INSERT INTO ABC (names) VALUES ('Motorola RoZR');
INSERT INTO ABC (names) VALUES ('Motorola RR');
INSERT INTO ABC (names) VALUES ('fin Motorola RIZ');
INSERT INTO ABC (names) VALUES ('Motorola R');
INSERT INTO ABC (names) VALUES ('sau Google Pixel');
INSERT INTO ABC (names) VALUES ('Google Pixel 2');
INSERT INTO ABC (names) VALUES ('Google Pixel 3');
INSERT INTO ABC (names) VALUES ('Samsung Galaxy');
INSERT INTO ABC (names) VALUES ('aus Samsung Galaxy 3');
INSERT INTO ABC (names) VALUES ('Samsung Small 2');
INSERT INTO ABC (names) VALUES ('Samsung Earth');
INSERT INTO ABC (names) VALUES ('ko Samsung Solar');
INSERT INTO ABC (names) VALUES ('Samsung Milky Way');
INSERT INTO ABC (names) VALUES ('Samsung Chill');
INSERT INTO ABC (names) VALUES ('Yi Apple Chill');
INSERT INTO ABC (names) VALUES ('In Apple');
INSERT INTO ABC (names) VALUES ('razy Motorola');
INSERT INTO ABC (names) VALUES ('Samsung');`
所以,我有一个这样的表,想象一下有 500000 行和 4800 个品牌名称。
4800 个品牌名称可以是第一个词、第二个词、第三个词或最后一个词。
解决此问题的一种可能方法是获取子字符串并对其进行计数,然后按 count(pattern) desc 排序,其中 rownum < 4800;
现在我需要找到单词的数量(例如:Apple、Samsung、Motorola)
所需的输出如下所示:
解决方案
如果模式可以简化为名称的第一个单词,则如下所示:
select
case
when names like '%_ %' then substring(names, 1, charindex(' ', names) - 1)
else names
end pattern,
count(*) counter
from abc
group by case
when names like '%_ %' then substring(names, 1, charindex(' ', names) - 1)
else names
end
这将适用于 SqlServer。
请参阅演示。
结果:
> pattern | counter
> :------- | ------:
> Apple | 9
> Google | 3
> In | 1
> Motorola | 6
> razy | 1
> Samsung | 8
> Yi | 1
推荐阅读
- swift - SwiftyDropbox API 操作在库外部失败
- android - 如何在每个页面的操作栏中实现连续菜单选项
- debugging - Delphi 7 调试器在 64 位环境中冻结
- ruby - 如何更改通过简单表单存储集合的方式?
- python - 我如何使用 get_reaction_users?
- c# - 如何使用 LINQ 将对象列表中的字段与另一个字段的对应项分配?
- python - 通过 pip 在 Windows 上安装 Pygame 时出错
- google-apps-script - 如果单元格为空白,MailApp 不发送电子邮件
- java - Baseadapter 滚动缓慢且滞后
- javascript - 如何在 Mongoose 模式中创建多个唯一数据点?