sql - 谷歌大查询 - 点后拆分并合并结果
问题描述
我正在尝试通过来自 Firebase 数据集的谷歌大查询来获得一些具有移动操作系统版本的用户。
我的输入是:
Row versions users
1 12.1.2 27984
2 12.1 5702
3 11.4.1 1354
4 12.0.1 1325
5 12.1.1 837
6 12.0 685
7 10.3.3 484
8 12.1.3 411
9 11.4 353
10 11.3.1 184
11 11.2.6 140
我想要的输出是:
versions users
12 34000
11 23000
10 10000
基本上,我想知道有多少用户使用我们的 12、11、10、.. 版本。我不介意详细的版本。
总的来说,凭借我的 SQL 技能,我来到了这里:
SELECT device.operating_system_version as versions, count(distinct(user_pseudo_id)) as users
FROM [my-table:analytics_188188188.events_20190102]
WHERE device.operating_system = "IOS" and device.operating_system_version LIKE '10.%'
GROUP BY versions
ORDER BY users desc
LIMIT 1000
它给了我很好的结果:
Row versions users
1 10.3.3 484
2 10.2.1 53
3 10.3.2 40
4 10.2 31
5 10.1.1 20
6 10.3.1 18
7 10.0.2 15
8 10.0.1 5
9 10.3 5
10 10.0.3 2
但是在这里,我不知道接下来我应该做什么。我可以想象我必须(以某种方式)修剪点之后的所有内容,然后对用户数量求和,但该怎么做呢?你能帮我吗?
解决方案
您需要提取主要版本。这是一种方法:
SELECT REGEXP_EXTRACT(e.device.operating_system_version, '^[^.]*') as version,
COUNT(DISTINCT e.user_pseudo_id) as users
FROM [air-bank-prod:analytics_188576439.events_20190102] e
WHERE e.device.operating_system = 'IOS' AND
e.device.operating_system_version LIKE '10.%'
GROUP BY version
ORDER BY users desc
LIMIT 1000;
注意:对于您的特定示例-由于LIKE
条件-您可以只取前两个字符
SELECT SUBSTR(e.device.operating_system_version, 1, 2) as version,
推荐阅读
- docker - 尝试在 RHEL Server 7.8 上安装 Docker 时如何解决“没有可用的包 docker-1.13.1”?
- github - 如何在没有要点的情况下在我的网站中显示 github 代码
- sql - 检查sql server中的字符串中是否存在子字符串
- assembly - 如何在 Linux 程序集上使用定义的频率制作正弦波
- python - 关键路径法
- jmeter - JMeter 中的记录问题 - SSO(桌面应用程序)
- flutter - 如何播放 m3u8 文件咀嚼颤动?
- python - Pandas group by 未显示基于哪个 group by 完成的列
- google-places-api - 有没有办法使用 Places API 只返回 Gyms?
- android - 当活动在android中处于全屏模式时滚动不起作用?