当前位置: 首页 > 面试题库 >

获取随机记录的行数

阳光辉
2023-03-14
问题内容

对于像这样的简单SQL,

SELECT top 3 MyId FROM MyTable ORDER BY NEWID()

如何将行号添加到它们,以使行号变为1,2和3?

更新:

我以为我可以像上面那样简化我的问题,但是事实却更加复杂。所以这是一个完整的版本-我需要MyTable为每个人提供三个随机选择(来自),选择/行数分别为1、2和3,并且人与选择之间没有逻辑上的联系。

SELECT * FROM Person
LEFT JOIN (
  SELECT top 3 MyId FROM MyTable ORDER BY NEWID()
) D ON 1=1

上面的SQL的问题是,

显然,应该添加1、2和3的拾​​取/行数
而且不明显的是,上面的SQL将给每个人相同的选择,而我需要给不同的人不同的选择
这是一个可以测试的SQL:

SELECT TOP 15 database_id, create_date, cs.name FROM sys.databases
CROSS apply ( 
  SELECT top 3 Row_number()OVER(ORDER BY (SELECT NULL)) AS RowNo,*
  FROM (SELECT top 3 name from sys.all_views ORDER BY NEWID()) T
  ) cs

所以,请帮忙。

注:这是不是关于MySQL BYT T-SQL作为它们的语法是不同的,因此该解决方案是不同的,以及。


问题答案:

添加Row_number到外部查询。试试这个

SELECT Row_number()OVER(ORDER BY (SELECT NULL)),*
FROM   (SELECT TOP 3 MyId
        FROM   MyTable
        ORDER  BY Newid()) a 

在逻辑上,TOP关键字在之后处理Select。在生成行号后,将随机提取3条记录。因此,您不应在原始查询中生成行号

更新

这可以通过实现CROSS APPLY。用表中的where有效列名替换cross apply子句中的列名Person

SELECT *
FROM   Person p
       CROSS apply (SELECT Row_number()OVER(ORDER BY (SELECT NULL)) rn,*
                    FROM   (SELECT TOP 3 MyId
                            FROM   MyTable
                            WHERE  p.some_col = p.some_col -- Replace it with some column from person table
                            ORDER  BY Newid())a) cs 


 类似资料:
  • 它给我所有的数据,但我只需要3个随机数据。我有谷歌关于获得随机N没有数据,但为什么不为我工作?

  • 问题内容: 如何使用Django获得两个不同的随机记录?我见过有关如何获得一个记录的问题,但我需要获得两个随机记录,而且它们必须有所不同。 问题答案: 如果你在ORM中指定了随机运算符,我很确定它将为你提供两个不同的随机结果,不是吗?

  • 问题内容: 如何使用SQLAlchemy从表中选择一个或多个随机行? 问题答案: 这在很大程度上是特定于数据库的问题。 我知道PostgreSQL,SQLite,MySQL和Oracle可以通过随机函数进行排序,因此可以在SQLAlchemy中使用它: 接下来,您需要通过所需的记录数来限制查询(例如使用)。 请记住,至少在PostgreSQL中,选择随机记录会带来严重的性能问题。这是一篇很好的文章

  • 本文向大家介绍php随机取mysql记录方法小结,包括了php随机取mysql记录方法小结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了php随机取mysql记录方法。分享给大家供大家参考。具体分析如下: 在php中要随机取mysql记录我们可以直接使用mysql_query来执行mysql中的select rand函数获取的数据并读出来,这里就来给大家简单介绍一下. 方法一,代码如下:

  • 问题内容: 我不知道我只是在错误的地方还是在什么地方找东西,但是活动记录是否具有检索随机对象的方法? 就像是? 或者…好吧,因为这种方法不存在,所以有一些惊人的“ Rails Way”来做到这一点,我似乎总是很冗长。我也使用mysql。 问题答案: 在Rails 4中,我将扩展: 这样,您可以使用范围:

  • 我试图从Laravel5.7中的表中获取随机数目的行,但找不到任何解决方案。我有用 它工作正常。但是,我需要应用它与