如果存在其他明智地随机选择另一个,如何选择符合条件的行?



我有下表:

article_id , locale, category_name, is_primary_local
1             en              answers          True
1             es              respuestas       False
2             en              questions        False
2             de              fragen           False
2             it              domande          False

关键是(article_id, locale)

我想创建一个以article_id为键的表。 逻辑是,如果有主要的本地,则将其用于category_name如果没有,则随机选择一个。每个article_id只能有一个primary_local。

因此,输出可能如下所示:

article_id , category_name
1            answers
2             fragen    -- or domande, questions

这是我尝试过的:

SELECT 
article_id,
MIN(CASE WHEN is_primary_local  Then category_name else ?????  END) as category_name
From table
GROUP BY article_id

但是我不知道如何完成这种情况?

我正在使用presto sql。

如果您不介意而不是随机选择一个返回最小category_name那么在您的代码中使用如下所示COALESCE()

SELECT 
article_id,
COALESCE(
MIN(CASE WHEN is_primary_local  THEN category_name END),
MIN(category_name) 
) as category_name
From tablename
GROUP BY article_id

请考虑以下查询:

select article_id, locale, category_name, is_primary_local
from (
select 
t.*,
row_number() 
over(partition by article_id order by is_primary_local desc, random()) rn
from mytable t
) t
where rn = 1

内部查询对article_id组中的记录进行排名,按降序is_primary_local排序(这会true值放在首位(,然后随机排序。外部查询按每个组的顶部记录进行筛选。作为使用窗口函数的奖励,您可以返回所有列(不仅是article_idcategory_name(。

DB小提琴上的演示

首次执行:

article_id | 区域设置 | category_name | is_primary_local ---------: |:----- |:------------ |:---------------  1 |zh |答案 |t                 2 |zh |问题 |f

第二次执行:

article_id | 区域设置 | category_name | is_primary_local | rn ---------: |:----- |:------------ |:--------------- |-:  1 |zh |答案 |t | 1  2 |德 |弗拉根 |F | 1

相关内容

  • 没有找到相关文章

最新更新