我想要获得的查询是“显示具有最多客户端的代理”。
我正在使用的表格:
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);
当我在我的数据库中运行它时,我得到一个空集,这没有任何意义。我在这做错了什么?我已经在这个工作了几个小时了,我被困住了,谢谢你的帮助。
答案 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 JOIN
与COALESCE
结合使用,代理商必须至少拥有一个客户端,并且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