MySQL查询使用多个表上的count

时间:2013-11-22 09:27:35

标签: mysql

我想要获得的查询是“显示具有最多客户端的代理”。

我正在使用的表格:

realtor(rid, fname, lname)     
contract(contractid, buyrid, buycid)      
property(pid, price, sellrid, sellcid)  

我要做的是制作一张包含来自合同和财产的buyrid和sellrid的表,然后计算最多使用哪个rid。这就是我所做的不起作用:

SELECT r.rid, fname, lname
FROM realtor r, contract c, property p
WHERE r.rid = c.buyrid and r.rid = p.sellrid
GROUP BY c.buyrid, p.sellrid
HAVING count(*) >= ALL 
(SELECT count(*) 
FROM contract c, property p
GROUP BY c.buyrid, p.sellrid); 

当我在我的数据库中运行它时,我得到一个空集,这没有任何意义。我在这做错了什么?我已经在这个工作了几个小时了,我被困住了,谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

我无法测试这个,但这是我倾向于做的事情:

SELECT r.rid,
       fname,
       lname,
       count(*) AS clients
  FROM realtor r
       LEFT JOIN contract c
          ON r.rid = c.buyrid
       LEFT JOIN property p
          ON r.rid = p.sellrid
 WHERE coalesce(c.buyrid, p.sellrid) IS NOT NULL
GROUP BY r.rid
ORDER BY count(*) DESC
 LIMIT 1

LEFT JOINCOALESCE结合使用,代理商必须至少拥有一个客户端,并且order by和limit强制只返回一行。我在最后添加了count(*),使您可以更轻松地测试脚本。

答案 1 :(得分:0)

SELECT  r.rid, 
        fname, 
        lname
FROM realtor AS r
INNER JOIN contract AS c ON r.rid=c.buyrid
INNER JOIN property AS p on r.rid=p.sellrid
GROUP BY r.rid
ORDER BY COUNT(*) DESC
LIMIT 1