我使用的是MSSQL Server 2005。在我的db中,我有一个表“customerNames”,它有两列“Id”和“名称”和大约。1000年的结果。

我正在创建一个功能,每次都必须随机选择5个客户。谁能告诉我如何创建一个查询,将获得随机5行(Id,和名称)每次查询执行时?


当前回答

SELECT TOP 5 Id, Name FROM customerNames ORDER BY NEWID()

其他回答

如果你使用Yandex数据库,那么你应该使用

select column from table order by random (TableRow()) limit 1;

也许这个网站会有帮助。

对于那些不想点击浏览的人:

SELECT TOP 1 column FROM table
ORDER BY NEWID()
SELECT * FROM TABLENAME ORDER BY random() LIMIT 5; 

如果你有一个有数百万行的表,并且关心性能,这可能是一个更好的答案:

SELECT * FROM Table1
WHERE (ABS(CAST(
  (BINARY_CHECKSUM
  (keycol1, NEWID())) as int))
  % 100) < 10

https://msdn.microsoft.com/en-us/library/cc441928.aspx

为了打乱SQL结果集,需要使用特定于数据库的函数调用。

请注意,使用RANDOM函数对大型结果集进行排序可能会非常慢,因此请确保对小型结果集进行排序。 如果你必须洗牌一个大的结果集,然后限制它,那么最好使用Oracle SAMPLE(N)或SQL Server或PostgreSQL中的TABLESAMPLE,而不是ORDER BY子句中的随机函数。

所以,假设我们有如下的数据库表:

以及歌曲表中的以下行:

| id | artist                          | title                              |
|----|---------------------------------|------------------------------------|
| 1  | Miyagi & Эндшпиль ft. Рем Дигга | I Got Love                         |
| 2  | HAIM                            | Don't Save Me (Cyril Hahn Remix)   |
| 3  | 2Pac ft. DMX                    | Rise Of A Champion (GalilHD Remix) |
| 4  | Ed Sheeran & Passenger          | No Diggity (Kygo Remix)            |
| 5  | JP Cooper ft. Mali-Koa          | All This Love                      |

甲骨文

在Oracle上,需要使用DBMS_RANDOM. conf文件。VALUE函数,如下例所示:

SELECT
    artist||' - '||title AS song
FROM song
ORDER BY DBMS_RANDOM.VALUE

当在Oracle上运行前面提到的SQL查询时,我们将得到以下结果集:

| song                                              |
|---------------------------------------------------|
| JP Cooper ft. Mali-Koa - All This Love            |
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
| HAIM - Don't Save Me (Cyril Hahn Remix)           |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix)  |
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love      |

请注意,由于DBMS_RANDOM,这些歌曲是按随机顺序列出的。ORDER by子句使用的VALUE函数调用。

SQL Server

在SQL Server环境中,需要使用NEWID函数,示例如下:

SELECT
    CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY NEWID()

当在SQL Server上运行上述SQL查询时,我们将得到以下结果集:

| song                                              |
|---------------------------------------------------|
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love      |
| JP Cooper ft. Mali-Koa - All This Love            |
| HAIM - Don't Save Me (Cyril Hahn Remix)           |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix)  |
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |

请注意,由于order by子句使用了NEWID函数调用,歌曲是按随机顺序列出的。

PostgreSQL

在PostgreSQL上,需要使用random函数,示例如下:

SELECT
    artist||' - '||title AS song
FROM song
ORDER BY random()

当在PostgreSQL上运行上述SQL查询时,我们将得到以下结果集:

| song                                              |
|---------------------------------------------------|
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
| JP Cooper ft. Mali-Koa - All This Love            |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix)  |
| HAIM - Don't Save Me (Cyril Hahn Remix)           |
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love      |

请注意,由于order by子句使用了随机函数调用,歌曲是按随机顺序列出的。

MySQL

在MySQL上,需要使用RAND函数,示例如下:

SELECT
  CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY RAND()

当在MySQL上运行前面提到的SQL查询时,我们将得到以下结果集:

| song                                              |
|---------------------------------------------------|
| HAIM - Don't Save Me (Cyril Hahn Remix)           |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix)  |
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love      |
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
| JP Cooper ft. Mali-Koa - All This Love            |

请注意,由于order by子句使用了RAND函数调用,歌曲是按随机顺序列出的。