我正在尝试通过Google大查询从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
但是在这里,我不知道下一步该怎么做。我可以想象我必须(以某种方式)修剪点后的所有内容,然后求和用户数量的总和,但是该怎么做呢?你能帮我吗?
答案 0 :(得分:1)
您需要提取主要版本。这是一种方法:
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,
答案 1 :(得分:1)
提取主要版本的另一种方法如下例所示-适用于BigQuery旧版SQL(因为它是您在问题中使用的语言)
#legacySQL
SELECT
os, major_version, EXACT_COUNT_DISTINCT(user) users
FROM (
SELECT
device.operating_system AS os,
FIRST(SPLIT(device.operating_system_version, '.')) AS major_version,
user_pseudo_id AS user
FROM [my-table:analytics_188188188.events_20190102]
)
GROUP BY os, major_version
ORDER BY users DESC
LIMIT 1000
注意:
使用FIRST(SPLIT(device.operating_system_version, '.'))
实际提取主要版本
和
使用EXACT_COUNT_DISTINCT(user)
获得不同数量的用户
另外,请考虑将migrating用于BigQuery标准SQL的代码,因为BigQuery团队强烈建议使用它(请参见@ElliottBrossard的评论)