日期:2014-05-19  浏览次数:20463 次

聚合查询涉及多表时的处理方法
我有表map和record
map表记录了用户信息,列是id,comment,分别表示某人的id和姓名
例如:
id       comment
1         tom
2         jerry
3         sam

record表记录了用户来访记录,列是number,id,mark,分别表示来访记录的自动编号,来访人的id和来访的内容
例如:
number   id     mark
1001       3       legrijo
1002       3       wogfejwg
1003       3       wgegw
1004       1       wgoeo34
1005       2       9614weg
1006       1       wgwgeg

现在要查询产生这样的结果:


id     comment     num
3       sam             3
1       tom             2
2       jerry         1


num表示某人的来访次数
我写的查询语句只能产生id,num这两项,再加入comment就必须用临时表,有没有办法用一个语句产生这个结果?


***********************************************************

附自己的语句:


create   table   #t   ([id]   int   ,num   int)

insert   into   #t

select   id   ,count(*)   as   num   from   record
group   by   id
order   by   num   desc


select   #t.id,m.comment,#t.num   from   #t,map   m   where   m.id=#t.id  
order   by   #t.num   desc




------解决方案--------------------
select count(aa.id) num,a.id,b.comment from record a, map b where a.id=b.id group by a.id ,b.comment

?
------解决方案--------------------
select count(a.id) num,a.id,b.comment from record a, map b where a.id=b.id group by a.id ,b.comment order by count(aa.id) desc
------解决方案--------------------
select a.id ,a.comment,num = (select count(*) from record where id = a.id )from map a
order by num desc
------解决方案--------------------
Select
A.id,
A.comment,
B.num
From
map A
Inner Join (
Select id,Count(1) As Num From record Group By id) B
On A.id=B.id