SQL。获取组查询中的数据示例
我有一个只有两列的简单表:SQL。获取组查询中的数据示例,sql,random,group-by,google-bigquery,pivot,Sql,Random,Group By,Google Bigquery,Pivot,我有一个只有两列的简单表: | name | domain | 我需要SQL查询来获取此数据: | domain | names count | sample name 1 | ...2 | ...3 | ...4 | ...5 | 因此,第一部分很简单,只需按域分组并计算名称数。但是第二部分,我需要在组中抽取5个姓名样本(可以是随机的)-我不知道如何解决它 您可以使用窗口函数和聚合: select domain, count(*) names_count, max(
| name | domain |
我需要SQL查询来获取此数据:
| domain | names count | sample name 1 | ...2 | ...3 | ...4 | ...5 |
因此,第一部分很简单,只需按域分组并计算名称数。但是第二部分,我需要在组中抽取5个姓名样本(可以是随机的)-我不知道如何解决它 您可以使用窗口函数和聚合:
select
domain,
count(*) names_count,
max(case when rn = 1 then name end) sample_name_1,
max(case when rn = 2 then name end) sample_name_2,
max(case when rn = 3 then name end) sample_name_3,
max(case when rn = 4 then name end) sample_name_4,
max(case when rn = 5 then name end) sample_name_5
from (
select t.*, row_number() over(partition by domaine order by rand()) rn
from mytable t
) t
group by domain
子查询随机排列具有相同
域的名称
s。然后,外部查询按域聚合,并使用条件聚合为每个组带来前5个随机排序的名称。下面是BigQuery标准SQL
#standardSQL
SELECT domain, names_count,
samples[OFFSET(0)] AS sample_name_1,
samples[SAFE_OFFSET(1)] AS sample_name_2,
samples[SAFE_OFFSET(2)] AS sample_name_3,
samples[SAFE_OFFSET(3)] AS sample_name_4,
samples[SAFE_OFFSET(4)] AS sample_name_5
FROM (
SELECT domain,
COUNT(name) names_count,
ARRAY_AGG(name ORDER BY RAND() LIMIT 5) samples
FROM `project.dataset.table`
GROUP BY domain
)
请用您正在运行的数据库标记您的问题:mysql、oracle、postgresql…?我正在使用google bigquery。它支持标准的SQL方言。谢谢!即使有2B条记录,这个查询的效果也非常好。