2013-11-22 44 views
0

我試圖得到的查詢是「用最多的客戶端顯示代理」。在多個表上使用計數的MySQL查詢

,我利用表:

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

我所試圖做的是使具有從合同和財產buyrid和sellrid一個表,然後計算其擺脫使用最多。這是我有什麼不工作:

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

是否要選擇代理人的ID,名字和姓氏,以最多的客戶?房地產經紀人是代理商數據表。對? – Christos

+0

是的,我想顯示代理人的信息誰擁有最多的客戶端和房地產經紀人表具有代理商的數據。 – cjw

+0

@cjw:請不要將'已解決'添加到您的問題。我們已經知道你的答案對你有幫助,這就是左邊空白處的[綠色選中標記]((http://meta.stackexchange.com/a/5235/220538))。 –

回答

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 
+0

謝謝,內部連接正是我想要的,但我不知道命令。 – cjw

+0

歡迎cjw。 – Christos

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 s的COALESCE結合需要一個代理至少有一個客戶端,並通過訂單和該限制強制僅返回一行。我在末尾添加了count(*),使您能夠更輕鬆地測試腳本。

+0

是的它的工作原理,感謝您的幫助 – cjw