2011-12-20 60 views
29
(SELECT COUNT(motorbike.`owner_id`) as count,owner.`name`,transport.`type` FROM transport,owner,motorbike WHERE transport.type='motobike' 
AND owner.`owner_id`=motorbike.`owner_id` 
AND transport.`type_id`=motorbike.`motorbike_id` GROUP BY motorbike.owner_id) 
UNION ALL 
(SELECT COUNT(car.`owner_id`) as count,owner.`name`,transport.`type` FROM transport,owner,car WHERE transport.type='car' 
AND owner.`owner_id`=car.`owner_id` 
AND transport.`type_id`=car.`car_id` GROUP BY car.`owner_id`) 

上面的查詢返回的結果是這樣的下方,集團通過與工會的mysql選擇查詢

count   name 
1    Linda 
2    Mary 
1    Steve 
1    Linda 

該查詢算多少運輸是由所有者擁有。琳達有一輛汽車和一輛摩托車,所以結果應該:

count   name 
2    Linda 
2    Mary 
1    Steve 

我已經試過此查詢,但返回錯誤:

(SELECT COUNT(motorbike.`owner_id`),owner.`name`,transport.`type` FROM transport,owner,motorbike WHERE transport.type='motobike' 
AND owner.`owner_id`=motorbike.`owner_id` 
AND transport.`type_id`=motorbike.`motorbike_id`) 
UNION ALL 
(SELECT COUNT(car.`owner_id`),owner.`name`,transport.`type` FROM transport,owner,car WHERE transport.type='car' 
AND owner.`owner_id`=car.`owner_id` 
AND transport.`type_id`=car.`car_id`) GROUP BY motorbike.owner_id 

誰能幫助我嗎?

回答

85
select sum(qty), name 
from (
    select count(m.owner_id) as qty, o.name 
    from transport t,owner o,motorbike m 
    where t.type='motobike' and o.owner_id=m.owner_id 
     and t.type_id=m.motorbike_id 
    group by m.owner_id 

    union all 

    select count(c.owner_id) as qty, o.name, 
    from transport t,owner o,car c 
    where t.type='car' and o.owner_id=c.owner_id and t.type_id=c.car_id 
    group by c.owner_id 
) t 
group by name 
+0

它的工作......感謝很多;) – user1103332 2011-12-20 09:57:13

+0

這樣一個簡單的方法來做到這一點,但我永遠不會想到這一點。真棒! – alanaktion 2013-03-15 20:20:31

+0

如何添加訂單和限制? – 2015-11-28 19:23:53

1

試試這個編輯:

(SELECT COUNT(motorbike.owner_id),owner.name,transport.type FROM transport,owner,motorbike WHERE transport.type='motobike' AND owner.owner_id=motorbike.owner_id AND transport.type_id=motorbike.motorbike_id GROUP BY motorbike.owner_id) 

UNION ALL 

(SELECT COUNT(car.owner_id),owner.name,transport.type FROM transport,owner,car WHERE transport.type='car' AND owner.owner_id=car.owner_id AND transport.type_id=car.car_id GROUP BY car.owner_id) 
+0

我試過集團通過car.owner_id,但仍返回錯誤 – user1103332 2011-12-20 09:12:21

+0

有什麼錯誤你越來越?如果我有錯誤文本,我可以更好地調試問題 – 2011-12-20 09:16:37

+0

錯誤代碼:1064 這是我得到的錯誤。你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在'GROUP BY car.owner_id – user1103332 2011-12-20 09:22:14

3

這可能是你的後:

SELECT Count(Owner_ID), Name 
FROM (
    SELECT M.Owner_ID, O.Name, T.Type 
    FROM Transport As T, Owner As O, Motorbike As M 
    WHERE T.Type = 'Motorbike' 
    AND O.Owner_ID = M.Owner_ID 
    AND T.Type_ID = M.Motorbike_ID 

    UNION ALL 

    SELECT C.Owner_ID, O.Name, T.Type 
    FROM Transport As T, Owner As O, Car As C 
    WHERE T.Type = 'Car' 
    AND O.Owner_ID = C.Owner_ID 
    AND T.Type_ID = C.Car_ID 
) 
GROUP BY Owner_ID