当前位置: 首页 > 知识库问答 >
问题:

如何组合两个选择,UNION All,rand()的结果

慕容宇
2023-03-14

有一个表格,其中包含一些答案。一个答案是true(字段tf=1),几个是false(字段tf=0)。如何选择1个真答案和N个假随机答案?结果必须是随机顺序的。这是我的例子,它的工作原理,但真正的答案总是在第一行:

(SELECT * FROM answers where tf=1 and `questionsid`=1 limit 1)
UNION all
(SELECT * FROM answers where tf=0 and `questionsid`=1 order by rand() limit 5 )

共有2个答案

庄宇
2023-03-14

谢谢顺便说一句,我有另一个解决方案,也很有效:

(SELECT *, rand() as t FROM answers where tf=1 and `questionsid`=1 limit 1)
UNION all
(SELECT *, rand() as t FROM answers where tf=0 and `questionsid`=1 order by rand() limit 5 )
order by t
卢英叡
2023-03-14

如果没有任何样本数据,这是未测试的,但是您可以使用外部的select,来包装您的查询,因此在选择一个正确答案和5个额外的随机错误答案后,返回所有6个再次随机排序的答案:

select * from (
    (select * 
    from answers 
    where tf=1 and questionsid=1 
    limit 1)
    union all
    (select * 
    from answers 
    where tf=0 and questionsid=1 
    order by Rand() 
    limit 5)
)r
order by rand()
 类似资料:
  • 我的表是: 我有一个包含10,000个地址的列表,如果地址存在于表中,我将循环访问该列表以检索相应的纬度/经度。 查询如下所示: 然后我检查结果集,看看是否有匹配。然后通过上面的查询循环其他9,999个地址,这花费的时间太长了。 是否有一种方法可以创建一个包含所有10000个地址的查询,并返回一个包含4列的结果集: 任何未找到地址在结果集列中都应该有一个空(0或null)纬度/经度值。我假设我可以

  • 问题内容: 我在表Hyperlink中有两列,即源和目标,用于存储超链接的源和目标。 有两个涉及b和c的超链接。两个超链接之间的区别在于超链接的方向。但是,我的目标是无论任何方向都检索唯一的超链接。因此,对于从b到c和从c到b的超链接,我只想选择其中之一。任何人都会做。 因此,我的结果应如下所示: 到目前为止,我可以使用Java进行一些处理,然后再使用JDBC执行SQL语句。但是,当表很大时,这将

  • 给定两个数组,其中数组1包含变量,数组2包含变量的值,我希望得到这两个数组的所有可能组合,例如: 数组可以容纳尽可能多的变量,也可以容纳。 所需输出: 我尝试了一种递归方法: 我希望能够将每一行正确的内容保存为中的一个元素,但首先我想知道如何正确打印每一行。 编辑:第二个数组不是常量,它在每个变量之间不同: 显然,这在递归中行不通,因为我需要将每个数组与变量数组一起发送,我通过创建一个对象来实现这

  • 我有两个针对同一个表的select查询,这两个查询在select部分中都只包含一个< code>sum(),但是在< code>where子句中有所不同。我需要做的是对两个查询的结果求和。 查询示例: 我需要的是像这样的东西 其中选择和,如我的示例查询中所示。 我试着回答这个问题,但没能成功。我还尝试用替换字段,但这不起作用,因为不允许在中使用

  • 问题内容: 我有一个库存表,我想创建一个报告,以显示订购商品的频率。 “库存”表: 基本上,我需要将这两个查询结合在一起。 查询打印库存余额: 打印销售统计信息的查询 我认为某种JOIN可以完成这项工作,但我不知道如何将查询粘合在一起。 所需的输出: 这仅是示例。也许我将需要添加更多条件,因为有更多列。是否存在将多个查询组合在一起的通用技术? 问题答案:

  • 我使用两个SELECT语句创建以下两个临时表t1和t2: 和 两个SELECT语句本质上总是返回相同数量的行。现在,我想水平连接/组合这两个结果,以获得以下输出表: 我尝试使用多个JOIN语句,但可以找到一种聪明的方法。我还尝试了UNION语句,它提供了垂直连接,但没有提供所需的水平版本。 这里有两个简单的选择语句,用于更好地定位可能的解决方案: 提前感谢您的帮助。