2012-07-02 19 views
6

私は、SQLでわかりやすい質問がありますが、わかりにくいです。私は、次の表があるとします。WHERE句を使用したSQLのカウント

company: 
    company_id 
    company_title 

users: 
    user_id 
    username 

company_owners: 
    company_id 
    user_id 

、会社の所有者など、複数のユーザが存在することができます。ここではいくつかのサンプルデータは、次のとおりです。

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 

私はCOMPANY_TITLE、ならびに特定の企業の所有者に基づいて、その会社の所有者の数を、取得するクエリ(MySQLの)を作成しようとしています。したがって、たとえば:

例クエリ(英語で)実行します。私は試してみました

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 

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 
「Cユーザーは」の所有者であることを、それぞれの会社の所有者の数を取得します。

しかし、それは私に "1"の所有権番号を与えます、私は仮定しています。

誰がどんな考えを持っていますか?必要に応じて詳細を提供することができます。

ありがとうございます!

+0

'course_id'は何ですか? –

+0

申し訳ありませんが、ミスタイプです – Chris

答えて

7

WHERE句は、「この会社の所有者が存在する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 

それがオンラインで作業を参照してください:sqlfiddle

+0

それは素晴らしい作品です。どのように私はそれを変更するので、私はまた、0人の所有者を持つすべての企業を得ることができますか?これは、所有者が0人を超える行のみを返します。 – Chris

+0

@Chris:所有者のいない会社は「C」で所有することができないため、所有者のない企業は返却しません。 –

+0

それは信じられないほど良い点であり、私は全く別のものを考えていました!ハハ、申し訳ありません。迅速な回答をいただきありがとうございます! – 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 
関連する問題