如何从SQL Server表中获取50%的记录?

问题描述 投票:0回答:6

假设我有一个包含 1000 行的表,我希望输出其中的 50%。我怎样才能做到这一点?有内置功能吗?

sql sql-server select
6个回答
6
投票

用途:

SELECT 
    TOP 50 PERCENT * 
FROM 
    Table1;

与行号

SELECT 
        TOP 50 PERCENT Row_Number() over (order by Column1) ,* 
    FROM 
        Table1;

注意

Row_number
应该有一个over子句,按列排序或按列分区


3
投票

top
语法支持
percent
修饰符,您可以使用:

SELECT TOP 50 PERCENT *
FROM   mytable

1
投票

解决方案如下:

select top 50 percent *
from TableName

1
投票

在 TSQL 中,您可以使用

TOP n PERCENT
,但您还应该对输出进行排序,以便也指定“百分比”,否则结果是不确定的。举一个简单的例子,如果行是无序的(在这种情况下,第一个插入是 6 而不是 1):

CREATE TABLE mytable (id INT)

INSERT INTO mytable (id)
VALUES
      (6)
    , (7)
    , (8)
    , (9)
    , (10)
    , (1)
    , (2)
    , (3)
    , (4)
    , (5) ;

如果我们简单地要求前 50%,输出就是

select top 50 percent
 id
from mytable
|编号 |
| 6 |
| 7 |
| 8 |
| 9|
| 10 | 10

但是如果我们使用 order by 子句,那么结果会更有意义。

select top 50 percent
 id
from mytable
order by id
|编号 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |

也有人问是否可以使用 row_number() 确定类似的结果,所以这里有一个方法

select
 id
from (
    select
       id
     , count(*) over(partition by (select 1)) all_count
     , row_number() over(order by id)         rn
    from mytable
    ) d
where rn <= all_count / 2
|编号 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |

db<>小提琴这里


0
投票
SELECT * FROM table 

LIMIT (SELECT COUNT(*)/2 FROM table)

0
投票

创建表Employee( EmpID int NOT NULL, EmpName Varchar (50), 性别查尔 (50), 工资整数, 城市字符(50) )

插入员工价值观 (1, 'Arjun', 'M', 75000, 'Pune'), (2, 'Ekadanta', 'M', 125000, '班加罗尔'), (3, '拉丽塔', 'F', 150000, '马图拉'), (4, '马达夫', 'M', 250000, '德里'), (5, '维萨卡, 'F', 120000, '马图拉') (6、“吠陀”、“F”、80000、“古尔冈”)

从员工中选择* 哪里 EmpID <= (Select Count(EmpID)/2 From Employee)

© www.soinside.com 2019 - 2024. All rights reserved.