日期:2014-05-18  浏览次数:20414 次

在线等:查询排序语句理解!
我要的到的结果
3   汽车   汽车文章2   994
1   汽车   汽车文章1   300
5   财经   财经新闻2   455
2   财经   财经文章1   293

按照上边的7条数据,我只需要取出这4条,
而且是按先tag数量分类排序的,再按visitcount排序
而且只需要显示tag数量大于2的,访问次数visitcount数量最大的两个,
其他的tag=军事   和tag=游戏   的count=1,不需要显示


create   table   tb(id   int,   tag   varchar(10),   title   varchar(20),   visitcount   int);
insert   into   tb   values(1,   '汽车 ',   '汽车文章1 ',   300)
insert   into   tb   values(2,   '财经 ',   '财经文章1 ',   293)
insert   into   tb   values(3,   '汽车 ',   '汽车文章2 ',   994)
insert   into   tb   values(4,   '军事 ',   '军事文章1 ',   32)
insert   into   tb   values(5,   '财经 ',   '财经新闻2 ',   455)
insert   into   tb   values(6,   '游戏 ',   '有心文章1 ',   332)
insert   into   tb   values(7,   '汽车 ',   '汽车文章2 ',   234)

Select   *  
From   tb   As   A  

Where   tag   In(
select   t.tag  
from   tb   t  
group   by   t.tag   having   count(tag)> 1)

And
(Select   Count(*)   From     tb   Where   tag=A.tag   And   visitcount> =A.visitcount) <3
Order   By   tag   Desc,visitcount   Desc

---结果
/*
id   tag   title   visitcount
-----------   ----------   ---------------   -----------
3   汽车   汽车文章2   994
1   汽车   汽车文章1   300
5   财经   财经新闻2   455
2   财经   财经文章1   293

(所影响的行数为   4   行)
-------------------------
请问:   Select   Count(*)   From     tb   Where   tag=A.tag   And   visitcount> =A.visitcount)   <   3   如何理解呀
And   visitcount> =A.visitcount   这种比较已经将数据记录都显示出来了,
<   3     ,如何理解呀

请高手指教!!!!!!
谢谢


------解决方案--------------------
Select Count(*) From tb Where tag=A.tag And visitcount> =A.visitcount) < 3
取最大的两个. a <= 2

group by t.tag having count(tag)> 1
分组后必须有两个以上的才取. a> 1

a <=2
a> 1
两条件合起来为 a = 2