POSTGRES ORDER BY random() 与 ROW_NUMBER 未按预期工作

问题描述 投票:0回答:1
let data = await Category.findAll({
  where: { list_category_id: body.category_id },
  attributes: {
    include: [
      [
        sequelize.literal(`COALESCE (
          CASE WHEN youtube_id_id IS NOT NULL THEN ROW_NUMBER() OVER (ORDER BY random(), youtube_id_id) END,
          CASE WHEN instagram_id_id IS NOT NULL THEN ROW_NUMBER() OVER (ORDER BY random(), instagram_id_id) END )`),
        "row_num",
      ],
    ],
  },
  order: [sequelize.literal("row_num")],
});

在一行中,只有一个具有 youtube_id_id 或 instagram_id_id 值,我想出了这个,以便我每次都可以获取包含 youtube_id_id 和 instagram_id_id 列值的行,但这仅在 ORDER BY 中没有 random() 的情况下才有效。我希望每次运行此命令时都能获得随机结果,同时确保具有这两个值的行都存在。我怎样才能做到这一点?

postgresql sequelize.js
1个回答
0
投票

我希望每次运行此命令时都能获得随机结果,同时确保同时存在具有这两个值的行。

您可以进行两个查询并

union
它们。

select *
from your_table
where youtube_id is null
  and instagram_id is not null
order by random()
limit 1

union

select *
from your_table
where youtube_id is not null 
  and instagram_id is null
order by random()
limit 1
© www.soinside.com 2019 - 2024. All rights reserved.