2017-04-07 4 views
0

私はカップルのビジネス名を選択し、他の2つの結合テーブルからの結果を数える非常に単純なクエリを持っています。何らかの理由で、数字がルールにのみ正しいとしても、ルールと同じ数のオファーを取得します。2つの結合されたテーブルからの数が同じではないのに同じものを示しています

たとえば、2つのオファーと6つのルールがあります。返された結果は両方とも6と表示されます。

私は何が欠けていますか?

SELECT 
    business_profile.busID, 
    business_profile.busName, 
    COUNT(business_offers.ofr_id) AS cntOffers, 
    COUNT(business_rules.rule_id) AS cntRules 
FROM business_profile 
LEFT JOIN business_offers ON (business_offers.ofr_busID = business_profile.busID) 
LEFT JOIN business_rules ON (business_rules.rule_busID = business_profile.busID) 
WHERE business_profile.busID > 1 
GROUP BY business_profile.busID 
ORDER BY cntRules DESC, cntOffers DESC 
LIMIT 20 
+0

てみ 'COUNT(DISTINCT ...)'(つまりNULL値がカウントされませんを除く)それ以外の場合は、あなただけの行数をカウントしている – Barmar

+0

は、列名は無関係です。 – Barmar

答えて

3

DISTINCTを使用すると、同じIDを何回も数えることはありません。

SELECT 
    business_profile.busID, 
    business_profile.busName, 
    COUNT(DISTINCT business_offers.ofr_id) AS cntOffers, 
    COUNT(DISTINCT business_rules.rule_id) AS cntRules 
+1

それはそれでした!このような迅速な対応に感謝します。 – santa

関連する問題