gpt4 book ai didi

MYSQL随机选择3条记录,其中至少一条记录字段具有特定值

转载 作者:行者123 更新时间:2023-11-29 16:11:23 25 4
gpt4 key购买 nike

我尝试从表中随机选择 3 条记录,前提是结果应至少包含一条值“number”大于 3 的记录。

示例表:

+--------+-------+--------+
| ID | name | number |
+--------+-------+--------+
| 1 | name1 | 5 |
+--------+-------+--------+
| 2 | name2 | 0 |
+--------+-------+--------+
| 3 | name3 | 2 |
+--------+-------+--------+
| 4 | name4 | 7 |
+--------+-------+--------+
| 5 | name5 | 9 |
+--------+-------+--------+
| 6 | name6 | 1 |
+--------+-------+--------+
| etc... | | |
+--------+-------+--------+

因此,结果可能是 ID 为 1,2 和 6 的记录。或者 1,4 和 9。但不是 2,3 和 6,因为该结果不包含至少一条“number”> 3 的记录。

我尝试过此操作,但它无法返回始终包含至少一条值 > 3 的记录的结果:

SELECT name, number  FROM   table
WHERE EXISTS (
SELECT number FROM table
WHERE number > 3
)
ORDER BY RAND()
LIMIT 3

我认为我走错了路。任何帮助将不胜感激!

最佳答案

通过使用交叉连接创建所有可能的组合以供选择的 CTE:

WITH cte AS (
SELECT
n1.id id1, n1.name name1, n1.number number1,
n2.id id2, n2.name name2, n2.number number2,
n3.id id3, n3.name name3, n3.number number3
FROM numbers n1 CROSS JOIN numbers n2 CROSS JOIN numbers n3
WHERE
(n1.number > 3 OR n2.number > 3 OR n3.number > 3)
AND n1.id <> n2.id AND n1.id <> n3.id AND n3.id <> n2.id
ORDER BY RAND() LIMIT 1
)

SELECT id1 id, name1 name, number1 number FROM cte
UNION ALL
SELECT id2 id, name2 name, number2 number FROM cte
UNION ALL
SELECT id3 id, name3 name, number3 number FROM cte

请参阅demo

关于MYSQL随机选择3条记录,其中至少一条记录字段具有特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55223695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com