Google大查询-点和合并结果后拆分

时间:2019-01-03 11:48:06

标签: sql google-bigquery

我正在尝试通过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   

但是在这里,我不知道下一步该怎么做。我可以想象我必须(以某种方式)修剪点后的所有内容,然后求和用户数量的总和,但是该怎么做呢?你能帮我吗?

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的评论)