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

有没有一种方法可以将选择查询的结果分为两个相等的一半?

金钊
2023-03-14
问题内容

我需要在Sql Server 2005中进行选择查询的解决方案。

我想查询返回两个结果集,每个结果集恰好包含符合特定条件的所有记录的一半。我尝试将TOP 50 PERCENT与Order
By一起使用,但是如果表中的记录数为奇数,则两个结果集中都会显示一条记录。我不想在记录集上重复任何记录。例子:

我有一个简单的表,其中包含TheID(PK)和TheValue字段(varchar(10))和5条记录。现在跳过where子句。

SELECT TOP 50 PERCENT * FROM TheTable ORDER BY TheID asc

导致所选ID的1,2,3

SELECT TOP 50 PERCENT * FROM TheTable ORDER BY TheID desc

产生所选ID的3,4,5

3是dup。当然,在现实生活中,查询非常复杂,其中包含大量的where子句和子查询。


问题答案:

SQL Server 2005和类似的:

select *, ntile(2) over(order by theid) as tile_nr from thetable

ntile(n)将输出分配到n个段中,每个段的大小相同(当行数不能被n整除时,取整或取整)。这样就产生了输出:

1 | value1 | 1
2 | value2 | 1
3 | value3 | 1
4 | value4 | 2
5 | value5 | 2

如果只需要上半部分或下半部分,则需要将其放入子查询中,例如:

select theid, thevalue from (
  select theid, thevalue, ntile(2) over(order by theid) as tile_nr from thetable
) x
where x.tile_nr = 1

将返回上半部分,并类似地x.tile_nr = 2用于下半部分



 类似资料:
  • 我正在从事一个基于Laravel5.7的项目,在这个项目中,Elount被用作ORM。 我需要在我的数据库上执行一个原始SQL语句。但是,我的查询在多个地方使用相同的参数。 这里有一个查询示例“这不是我真正的查询,更多的是为了解释问题。我的实际查询非常复杂,多次重用相同的参数” 我期待着下面的工作 但这给了我以下错误 SQLSTATE[HY093]:参数编号无效 如何在同一查询中使用Eloquen

  • 问题内容: 我喜欢JPA中针对静态查询的命名查询的想法,但是我经常想获取查询的计数结果以及查询的某些子集的结果列表。我不想写两个几乎相同的NamedQueries。理想情况下,我想要的东西是这样的: 假设m为10,s为0,并且Account中有400行。我希望r中有10个项目的列表,但我想知道总共有400行。我可以写第二个@NamedQuery: 但是如果我总是只想要计数,那么这样做似乎违反了DR

  • 问题内容: 我的网页上有一个“瘦”列表:例如,一个包含100个项目的列表,每个项目的长度为一个单词。为了减少滚动,我想在页面的两列甚至四列中显示此列表。我该如何使用CSS? 我希望该解决方案具有灵活性,这样,如果列表增加到200个项目,则无需进行很多手动调整即可容纳新列表。 问题答案: ul { -moz-column-count: 4; -moz-column-gap: 20px; -webki

  • 问题内容: 有没有办法用Laravel的ELOQUENT ORM来“限制”结果? 和雄辩? 问题答案: 创建一个扩展口才的游戏模型,并使用此模型: 这里将获得30条记录,这里将抵消30条记录。 在最新的Laravel版本中,您还可以使用:

  • 我在Java写了一个游戏。我做了一个叫做Camera的类,女巫有两个静态的int表示相机的位置。摄像机的位置要求每一帧在许多不同的地方。这个位置有时也会在几个不同的地方被修改。我的问题是,我是否能够以一种使依赖的类独立和更可重用的方式分离camera类。我看过一些东西,包括监听器,但我不确定这些东西是否是用于连续数据传输的。我真的很感激你给我一点建议。 编辑: 同样值得一提的是,我使用的是组件系统