返回每个组的前x个结果,其中组x计数不相同,SQL QUERY

时间:2016-02-23 15:32:39

标签: sql sql-server sql-server-2008

第一个表有域名和计数。

  domain    count
 abc.com    5
 def.com    10
 ghi.com    11
 jkl.com    4

第二个表有电子邮件ID,域名和域名(这个表会更长)

 email_id   domain_id   domain
 226902     2443        abc.com
 154689     100945      abc.com
  96480     130702      def.com
 586924     71563       def.com
 142857     132667      jkl.com
3820065     130702      jkl.com

我想得到的是从第一张表中获取计数并从第二张表中获取相应的匹配。例如abc.com我只想要第二个表中的电子邮件ID的前5个匹配,然后是def.com,我只想要第二个表中的电子邮件ID的前10个匹配,依此类推...... / p>

我有没有办法在SQL中执行此操作,或者我应该继续在php中执行此操作

欢迎任何帮助或替代解决方案。谢谢

1 个答案:

答案 0 :(得分:0)

这是另一种方法

SELECT *
FROM   first_table A
       CROSS APPLY (SELECT TOP (COUNT) *
                    FROM   second_table B
                    WHERE  A.domain = B.domain
                    ORDER  BY email_id,
                              domain_id) CS 

如果index上有second_table row_number,这个会更快。不需要像nonclustered index方法那样的全表扫描。

如果第二个表上没有索引,则创建以下CREATE NONCLUSTERED INDEX ix_Second_table_domain_email_id_domain_id ON Second_table(domain, email_id, domain_id)

index seek

哪个应该有助于优化人员在second_table中选择from Tkinter import * import Tkinter 而不是进行表扫描