从数据库检索按布尔值列排序的行,但也将随机数作为第二个条件

时间:2019-04-13 14:28:55

标签: sql postgresql postgresql-10

我有一个Items表:

id | name | is_featured
1    name1       false 

该表中的项目我需要以随机方式显示,但首先要具有功能。规则是:

  1. 如果计数is_featured=True> 6,则全部获得is_featured=True,然后随机分配并获得前6个

  2. 如果计数is_featured=True <6,则全部获得is_featured=True并随机分配 计算不超过6个的失踪人数。从无特征的随机项中获取剩余的item.Unite列表。

我需要在数据库中执行2-3个步骤:

  • 首先计算精选数量
  • 首先获得推荐,然后在需要时获得其余的信息,然后随机化(在后端)

是否可以一步一步在数据库中做到这一点?

1 个答案:

答案 0 :(得分: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对所有数据进行排序。然后选择前六个。