上次问了一个需要查询一张表按某个字段或多个字段分类的前N条记录,
有人给出了解决的SQL语句:
create table test
(
ID int identity,
areaid int,
score int
)--方法1 利用自增ID 适用于sql2000和2005
select areaid,
       score 
from test t
where id in(select top 3 id from test where areaid=t.areaid order by score desc)
--方法2 适用于sql2000和2005
select areaid,
       score 
from test t 
where (select count(*) from test where areaid=t.areaid and score>t.score )<3实验后确实可行,
但我不理解这两个语句,请问这两个语句该怎么理解?谢谢

解决方案 »

  1.   

    晕,分开理解就是
    select top 3 id from test where areaid=t.areaid order by score desc相同的areaid 取 按score 倒序的前3条
      

  2.   

    你想怎么理解?
    你把这句
    select areaid,
          score
    from test t
    where id in(select top 3 id from test where areaid=t.areaid order by score desc) 
    分别查询下。
    select top 3 id from test where areaid=t.areaid order by score descselect areaid,
          score
    from test t
    where id in(......) 
      

  3.   

    第一个好理解啊 
    id 在子查询中与test表areaid相等的前3里面 就返回值第2个是计算数量
    计算子查询中areaid与外面表相等 score比test表大的
      

  4.   

    楼主自己先写测试数据测试一下吧select areaid, 
          score ,(select count(*) from test where areaid=t.areaid and score>t.score )
    from test t 
    --where  <3