从布尔列排序的数据库行中检索,但也作为第二个标准随机检索

问题描述 投票:0回答:1

我有一个项目表:

id | name | is_featured
1    name1       false 

我需要以随机方式显示此表中的项目,但首先是is_featured。规则是:

  1. 如果计算is_featured=True> 6,那么获取is_featured=True all,并随机化并获得前6
  2. 如果计算is_featured=True <6,则获取所有is_featured=True,并随机化计算有多少缺失最多6个。从非特征随机获取剩余项目。单位列表。

我在数据库中的2-3个步骤中执行此操作:

  • 首先计算特色的数量
  • 首先得到特色然后如果需要得到其余的,并随机化(在后端)

可以在数据库中一步完成吗?

sql postgresql postgresql-10
1个回答
1
投票

你似乎想要六行,首先是is_featured。您可以一步完成:

select i.*
from items i
order by i.is_featured desc,  -- true is first
         random()
fetch first 6 rows only;

也就是说,首先使用is_featured对所有数据进行排序。然后选择前六个。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.