【问题标题】:SQL function to grab 1 static and 5 random records from the same columnSQL 函数从同一列中获取 1 个静态记录和 5 个随机记录
【发布时间】:2011-06-09 11:34:59
【问题描述】:

有谁知道如何从 SQL 表中选择条目,其中 A 列的第一条记录等于 X,并从同一列中选择其他 5 个随机 (1-10) 记录。

我需要通过一个 SQL 查询总共检索 6 个条目,其中第一个条目始终是静态的,其他五个是随机的。

汽车

ID      COLOUR      CAR

1        green      carX

2        blue       carX

3        green      carY

4        red        carZ

5        black      carA

6        yellow     carB

7        black      carB

要求的结果:

carX 的第一条记录,蓝色(静态)

和5个随机

所有记录都应该彼此不同 - 唯一

【问题讨论】:

  • 顺便说一句,您需要的结果与您想要的不匹配。

标签: mysql sql


【解决方案1】:

如果您有特定条件,您可以使用UNIONSELECT 静态行并将其与随机行的SELECT 组合。

SELECT * FROM cars WHERE column = 'static condition'
UNION
(SELECT * FROM cars WHERE column != 'static condition' ORDER BY RAND() LIMIT 5)

注意:如果您对 static 条件没有问题,请在评论中提供有关您的 static 记录的更多详细信息。

【讨论】:

  • 太棒了!非常感谢您的帮助,我实际上正在寻找这样简单的东西。祝你有美好的一天
【解决方案2】:

另一种不需要 2 次选择和联合的替代方法是 ORDER BY FIELD

在我的查询中,我使用了id 字段来强制将特定文章置于顶部。

08:34:47 (7) > select id, title FROM articles ORDER BY FIELD(id, 181634, id), RAND() LIMIT 6;
+--------+-----------------+
| id     | title           |
+--------+-----------------+
| 181634 | This is a title | 
| 166289 | This is a title | 
| 152080 | This is a title | 
| 170037 | This is a title | 
| 135411 | This is a title | 
| 171414 | This is a title | 
+--------+-----------------+
6 rows in set (0.06 sec)

08:35:09 (8) > select id, title FROM articles ORDER BY FIELD(id, 181634, id), RAND() LIMIT 6;
+--------+-----------------+
| id     | title           |
+--------+-----------------+
| 181634 | This is a title | 
| 104905 | This is a title | 
| 103044 | This is a title | 
| 129612 | This is a title | 
| 104157 | This is a title | 
| 160612 | This is a title | 
+--------+-----------------+
6 rows in set (0.06 sec)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多