作者terrybob (罪云樵)
看板Database
标题[SQL]left join与count的问题
时间Wed Nov 14 18:53:18 2012
有a,b资料表,a是使用者,b是使用者留言讯息
我想找出在使用者留言,有超过0则讯息的留言则数前三名!
也就是「a资料表所有使用者」,在「b资料表里所有留言版」的留言总数的前三名…
希望sql执行後,结果会是:
aid b_count
5 4
3 2
2 2
目前我自已系统这样下…
select * from a .... (第1圈回圈)
select count(aid) as count from b where count>0
and aid=1 2 3 5 6.....(第2个回圈)
但要把2个sql合并,并显示b资料表的留言总则数,
降幕排序前三名,我拼不出来sql…
只拼出…(当然是失败的!!!)
SELECT * FROM a, (SELECT count( aid )AS b_count, aid FROM b) b
WHERE a.aid = b.aid
还请高手指教,谢谢。
资料表如下:
--------------------------
a资料表(留言者)
aid name
1 a
2 b
3 c
4 d
5 e
6 f ...
--------------------------
b资料表(留言讯息)
bid aid message
1 1 test1
2 2 test2
3 2 test3
4 3 test4
5 3 test5
6 5 test6
7 5 test7
8 5 test8
9 6 test9
10 5 test10 ...
--------------------------
最後解决sql:(mysql)
SELECT a.aid, b_count FROM a,
(SELECT count(aid) AS b_count, aid FROM b GROUP BY aid) b
WHERE a.aid = b.aid AND b_count > 0
ORDER BY b_count DESC limit 3
我後来是卡在 count这段语法,不知道要加group by aid …
谢谢大家!^_^
--
习惯一个人在房间里,安静地享受书的内容…
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.75.186.7
1F:推 cloudsan:不太了解你想要的结果@@ 11/14 19:18
抱歉,写得太少,没有好好说明,我重写了…
※ 编辑: terrybob 来自: 211.75.186.7 (11/14 19:57)
2F:→ Darkland:你应该是要 group by aid、aid in a 、 order by count( 11/14 21:10
3F:→ Darkland:bid) 最後 limit 0,3 应该是不用 join 11/14 21:10
4F:推 kolynn:不好意思,不知道有没有合你的答案… 11/14 21:40
5F:→ kolynn:SELECT TOP 3 a.aid,b_count FROM a, (SELECT count(aid) A 11/14 21:42
6F:→ kolynn:AS b_count, aid FROM b GROUP BY aid) b 11/14 21:43
7F:→ kolynn:WHERE a.aid = b.aid AND b_count > 0 11/14 21:43
8F:→ kolynn:ORDER BY b_count DESC 11/14 21:43
9F:→ terrybob:谢谢kolynn,我是用mysql,你还是有帮助我解决问题了 11/15 00:19
※ 编辑: terrybob 来自: 203.67.40.198 (11/15 00:22)
10F:→ kolynn:不客气,我也学到很多。 11/15 10:13