2011-12-20 31 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`) 

Truy vấn trên trả về kết quả là như thế này dưới đây,Đoàn tự do với đoàn mysql select query

count   name 
1    Linda 
2    Mary 
1    Steve 
1    Linda 

Truy vấn này là để đếm có bao nhiêu phương tiện giao thông mà thuộc sở hữu của một chủ sở hữu. Linda có một chiếc xe và một chiếc xe máy, vì vậy kết quả nên:

count   name 
2    Linda 
2    Mary 
1    Steve 

Tôi đã thử truy vấn này, nhưng trả về lỗi:

(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 

thể bất cứ ai giúp tôi xin vui lòng?

Trả lời

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

Công việc của nó .. Cảm ơn rất nhiều;) – user1103332

+0

Cách đơn giản như vậy để làm điều đó, nhưng tôi chưa bao giờ nghĩ về điều đó. Tuyệt vời! – alanaktion

+0

Làm cách nào để thêm đơn đặt hàng và giới hạn? –

1

Hãy thử EDITED này:

(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

tôi đã cố gắng Nhóm By car.owner_id, nhưng vẫn trả về lỗi – user1103332

+0

lỗi gì đó bạn đang lấy? Nếu tôi có văn bản lỗi, tôi có thể gỡ lỗi tốt hơn vấn đề –

+0

Mã lỗi: 1064 Đây là lỗi tôi nhận được. Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để có cú pháp đúng để sử dụng gần 'GROUP BY car.owner_id – user1103332

3

Đây có thể là những gì sau của bạn:

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 
Các vấn đề liên quan