假设我有一个包含 1000 行的表,我希望输出其中的 50%。我怎样才能做到这一点?有内置功能吗?
用途:
SELECT
TOP 50 PERCENT *
FROM
Table1;
与行号
SELECT
TOP 50 PERCENT Row_Number() over (order by Column1) ,*
FROM
Table1;
注意:
Row_number
应该有一个over子句,按列排序或按列分区
top
语法支持percent
修饰符,您可以使用:
SELECT TOP 50 PERCENT *
FROM mytable
解决方案如下:
select top 50 percent *
from TableName
在 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<>小提琴这里
SELECT * FROM table
LIMIT (SELECT COUNT(*)/2 FROM table)
创建表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)