2012-07-02 43 views
6

Tôi có một câu hỏi có vẻ đơn giản với SQL mà tôi gặp khó khăn trong việc tìm ra. Giả sử tôi có các bảng sau:SQL COUNT với mệnh đề WHERE

company: 
    company_id 
    company_title 

users: 
    user_id 
    username 

company_owners: 
    company_id 
    user_id 

Bây giờ, có thể có nhiều người dùng làm chủ sở hữu công ty. Dưới đây là một số ví dụ dữ liệu:

company: 
1, "A Company" 
2, "B Company" 
3, "C Company" 

users: 
1, "A User" 
2, "B User" 
3, "C User" 

company_owners: 
1,1 
1,2 
1,3 
2,3 

tôi đang cố gắng để tạo ra một truy vấn (MySQL) mà được các COMPANY_TITLE, cũng như số lượng của chủ sở hữu đối với công ty đó, dựa trên một chủ sở hữu công ty cụ thể. Vì vậy, ví dụ:

truy vấn Ví dụ (bằng tiếng Anh) chạy: Nhận số của chủ sở hữu đối với từng công ty mà "C tài" là một chủ sở hữu:

company_id=1, company_title="A Company", num_owners=3 
company_id=2, company_title="B Company", num_owners=1 
company_id=3, company_title="C Company", num_owners=0 

Tôi đã thử:

SELECT COUNT(user_id), company.* FROM `company` 
LEFT JOIN `company_owners` ON company_owners.company_id = company.company_id 
WHERE company_owners.user_id=1 GROUP BY company_id 

Nhưng điều đó luôn mang lại cho tôi số lượng quyền sở hữu là "1", tôi giả định vì chỉ COUNTING hàng của nó trong đó user_id = 1.

Có ai có ý tưởng nào không? Tôi có thể cung cấp thêm chi tiết nếu cần.

Cảm ơn bạn rất nhiều!

+0

là gì 'course_id'? –

+0

Xin lỗi, đó là một loại nhập sai – Chris

Trả lời

7

Mệnh đề WHERE của bạn phải là "nơi có chủ sở hữu của công ty này với user_id = 1".

SELECT COUNT(user_id), company.* 
FROM `company` 
LEFT JOIN `company_owners` 
ON company_owners.company_id = company.company_id 
WHERE EXISTS 
(
    SELECT * 
    FROM company_owners AS co2 
    WHERE company_owners.company_id = co2.company_id 
    AND co2.user_id = 3 
) 
GROUP BY company_id 

Xem nó làm việc trực tuyến: sqlfiddle

+0

Điều đó hoạt động tốt. Làm thế nào tôi thay đổi nó để tôi cũng có thể nhận được tất cả các công ty có 0 chủ sở hữu? Điều này chỉ trả về các hàng có nhiều hơn 0 chủ sở hữu. – Chris

+0

@Chris: Nó không trả lại các công ty không có chủ sở hữu vì một công ty không có chủ sở hữu không thể được sở hữu bởi "C". –

+0

Đó là một điểm cực kỳ tốt và tôi đã nghĩ về một điều hoàn toàn khác! Ha ha xin lỗi. Cảm ơn bạn rất nhiều vì câu trả lời nhanh! – Chris

1
select company.company_id, company_title, count(*) 
from company join company_owners on company.company_id = company_owners.company_id 
where exists (select 1 from company_owners co where co.user_id = 1 and co.company_id = company.company_id) 
group by company.company_id, company_title 
Các vấn đề liên quan