5

我有一张tb_FirstName有一个字段的表FirstName。该表有 1 亿条非空记录,有很多重复,例如 John 出现了 200 万次。的独特计数FirstName超过 200 万。

如何使用标准sql尽快选择 1000 个不同的名称?

我目前正在使用以下内容,但这是

  • tSQL
  • 也许没有它可能的效率。

    SELECT x.FirstName
    FROM (
        SELECT  FirstName,
                rnk = RANK() OVER (ORDER BY Firstname)
        FROM    WHData.dbo.tb_DimUserAccount A
        GROUP BY FirstName
        ) x
    WHERE rnk <=1000
    
4

5 回答 5

11

似乎您可以使用TOP 1000with DISTINCT

SELECT DISINCT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount
ORDER BY FirstName

精简的 SQL Fiddle 演示

于 2013-03-29T11:40:09.217 回答
3

试试这个

SELECT TOP 1000 FirstName FROM 
(SELECT 
ROW_NUMBER() OVER(PARTITION BY FirstName ORDER BY FirstName) NO,
 FirstName FROM WHData.dbo.tb_DimUserAccount )
  AS T1 WHERE no =1 

或者

SELECT DISINCT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount ORDER BY FirstName
于 2013-03-29T11:43:33.783 回答
2

确保在 FirstName 上定义了索引。

SELECT TOP 1000 FirstName
FROM (SELECT DISTINCT FirstName
FROM dbo.tb_DimUserAccount) N
ORDER BY FirstName
于 2013-03-29T11:39:28.197 回答
2

在对 FirstName 字段的结果进行排序后,您需要数据。

如果未创建索引,则需要全表扫描。如果在 FirstName 上创建索引,则唯一索引扫描可以缩短时间。

于 2013-03-29T11:41:12.583 回答
1

带有 GROUP BY 子句的选项

SELECT TOP 1000 FirstName
FROM WHData.dbo.tb_DimUserAccount
GROUP BY FirstName
ORDER BY FirstName
于 2013-03-29T11:53:22.077 回答