我有兩個表。一個用於客戶,另一個用於客房。 我想用mysql以下要求取回房間什麼..mysql比較列count()
- 客戶在特定的房間數量小於從房間表
- 房間裏的腦袋是不是在客戶表
你可能看看這個貼 http://pastebin.com/WgTtkQvD
,你只能看到房間1不是預期的結果,因爲它的「頭」,總客戶在T帽子房間等於
室2有3個客戶是小於的房間「頭」 2
室3和4是在預料之中的結果,因爲沒有人「佔領它尚未
我有兩個表。一個用於客戶,另一個用於客房。 我想用mysql以下要求取回房間什麼..mysql比較列count()
你可能看看這個貼 http://pastebin.com/WgTtkQvD
,你只能看到房間1不是預期的結果,因爲它的「頭」,總客戶在T帽子房間等於
室2有3個客戶是小於的房間「頭」 2
室3和4是在預料之中的結果,因爲沒有人「佔領它尚未
SELECT Rooms.id AS room_id,
COUNT(Customer.id) AS occupied,
Rooms.head AS total_head,
Rooms.head - COUNT(Customer.id) AS remaining_head
FROM Rooms LEFT JOIN Customer ON Customer.room_id = Rooms.id
GROUP BY Rooms.id
HAVING remaining_head > 0
請參閱sqlfiddle。
您能否向我解釋如何分組並一直工作?也對左連接部分感到困惑。感謝:D – kapitanluffy 2012-07-25 08:29:26
@kapitanluffy:閱讀[SQL連接的可視化解釋](http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of- sql-joins.html)來理解一個'LEFT JOIN'。 'GROUP BY Rooms.id'將'Rooms.id'中所有具有相同值的記錄聚合成單個記錄(所以COUNT()函數在每個這樣的組上執行)。 'HAVING'然後過濾結果組,就像在執行任何分組之前'WHERE'過濾器記錄一樣。 – eggyal 2012-07-25 08:31:36
的下面應該做的伎倆:
SELECT r.id, COUNT(c.id), r.head, r.head - COUNT(c.id) FROM Rooms AS r LEFT JOIN Customer AS c ON r.id = c.room_id WHERE r.head <= COUNT(c.id) GROUP BY r.id
我沒有完全理解你的問題,我還沒有真正嘗試這在真實的數據庫,所以可能會有一些小問題進行梳理。評論它還有更多的問題出現。
讓我知道這是否正常工作
select r.id,c.occ_cnt as occupied,r.head as total_head,r.head - c.occ_cnt as remaining_head
from room r,
(
select room_id,count(id) as occ_cnt
from customer
group by room_id
) c
where r.id = c.room_id
試試這個
select
r.id,coalesce(ct.counting,0) as occupied,r.head as total_head,
r.head-coalesce(ct.counting,0) as remaining_head
from
rooms as r left join
(
select room_id,count(id) as counting from customer as ct
group by room_id
) as ct on r.id=ct.room_id
where r.head-coalesce(ct.counting,0)>0
什麼是 '頭' 的意思? – arkascha 2012-07-25 08:18:46
特定房間中的最大客戶 – kapitanluffy 2012-07-25 08:20:24
客戶表中有一個客戶正在使用房間1.在房間表中,「頭部」(最大客戶數)等於1 – kapitanluffy 2012-07-25 08:22:14