2017-11-28 20 views
-1

私は3つのテーブルエリア、乗り物と従業員を持っています。 ward_noは車両と従業員の外部キーです。 車両の台数と従業員数を選択し、他のエリアの詳細とともに表示したい。 私が使用したクエリは次のとおりです。別のテーブルからカウント(列)を選択

select a.* ,count(v.vid) as vehicles,count(e.eid) as employees from area a,vehicle v,employee e where v.ward_no=a.ward_no and e.ward_no=a.ward_no group by a.name; 

しかし、出力は私が欲しいものではありません。特定のエリアに車両/従業員の総数を表示する代わりに、カウントが使用される列の両方で同じ値が得られます。 私はあなたがユニークな車や従業員のCOUNT() GET回数

SELECT 
    a.*, 
    COUNT(DISTINCT v.vid) AS vehicles, 
    COUNT(DISTINCT e.eid) AS employees 
FROM 
    `area` a 
    JOIN vehicle v 
    ON v.ward_no = a.ward_no 
    JOIN employee e 
    ON e.ward_no = a.ward_no 
GROUP BY a.name 
+0

あなたが何を、あなたは何を手に入れた、何をしようとしました:

select a.* ,count(DISTINCT v.vid) as vehicles,count(DISTINCT e.eid) as employees from area a,vehicle v,employee e where v.ward_no=a.ward_no and e.ward_no=a.ward_no group by a.name; 

はまた、それが明示的に使用することをお勧めしますが、このように、むしろ暗黙のより登録しようあなたは得ることを期待しましたか?どうぞご覧ください(http://stackoverflow.com/help/how-to-ask) – swe

答えて

1

に使用DISTINCT、合流のために同じ車両と従業員を複数回取得している可能性があるかもしれませんMySQLの

+0

答えをありがとう! –

1

に新たなんですcountのデフォルトの動作は、NULL以外の値を数えることです。 あなたの場合、これは値の繰り返しをカウントします。

回数内DISTINCTを追加してみてください:

select a.* ,count(DISTINCT v.vid) as vehicles,count(DISTINCT e.eid) as employees 
    from area a JOIN vehicle v ON v.ward_no=a.ward_no 
    JOIN employee e ON e.ward_no=a.ward_no 
    group by a.name; 
+1

ありがとうございました! –