【问题标题】:SQL random rows but with prioritySQL随机行但具有优先级
【发布时间】:2022-11-27 18:00:54
【问题描述】:

假设我有一个包含以下列的表 编号(整数) 状态(可变字符) 消息(文本)

所以状态可以是“消极”、“积极”和“中立”。

我想要一个 sql 查询,它随机选择“否定”或“中性”的行,但优先保留“中性”。我已经有一个从 Negative 和 Neutral 中随机选择的 sql,但是我怎样才能使“Neutral”成为优先级。

谢谢!

我尝试了以下 SQL:

SELECT * 
FROM messages 
WHERE (`status` = 'Negative' or `status` = 'Neutral') 
ORDER BY RAND() 
LIMIT 1

但正如您所见,“中立”在这里并不是优先考虑的因素。我怎样才能将“中立”作为优先事项,同时同时获取两者。

【问题讨论】:

  • 你能澄清你想要什么吗?这还不清楚:“但优先考虑‘中立’。”当您只选择 1 条记录时。
  • 对不起,我想我没有解释好。我的意思是,即使有 Neutral,它也会同时获取两者。但中性会比负面结果更频繁

标签: mysql sql mysqli


【解决方案1】:

如果您首先按布尔表达式 status = 'Neutral' 降序排序,则可以设置优先级,这样这些行(如果有的话)将位于结果的顶部:

SELECT * 
FROM messages 
WHERE (`status` = 'Negative' or `status` = 'Neutral') 
ORDER BY `status` = 'Neutral' DESC,
         RAND() 
LIMIT 1;

【讨论】:

  • 但那样的话,如果有的话,它将永远是中立的。
  • @ZubairBaloch 这就是优先级的含义:如果存在“中性”,则返回随机的“中性”。如果不是,则返回一个随机的“负”。不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2011-01-18
相关资源
最近更新 更多