2016-10-24 9 views
1

私はshop_id、name、およびpromotion_codeを含むテーブルを持っています。私はshop_idごとにレコードの量を取得したいが、promotion_codeが複数回使用されるいくつかの重複レコードがある。私はこれらを無視したい。GROUP BYで重複を無視する

私が試してみました:

SELECT shop_id, count(*) as total_entries FROM tbl GROUP BY shop_id

をこれは私に正しい構造を与えるが、それはすべての重複行をカウントしません。

SELECT shop_id, count(*) as total_entries FROM tbl GROUP BY promotion_code, shop_id

しかし、これは結果として私にすべてゼロのを与える:だから私は、私が最初にpromotion_codeにそれらをグループ化してみてください、その後、shop_idにしようと思いました。

+0

は、いくつかのサンプル・テーブル・データ、および予想される結果を追加します。 (フォーマットされたテキストと同様に) – jarlh

+0

Btw、投稿されたSelectのゼロを返すことは不可能です。 – dnoeth

答えて

2
SELECT shop_id, count(distinct promotion_code) as total_entries FROM tbl GROUP BY shop_id 
2

試してみてください。

select shop_id, count(distinct promotion_code) 
from tbl 
group by shop_id 
1

SELECT shop_idは、promotion_code BY TBLグループからtotal_entriesとしてカウント(*)は、

の代わりに使用して(*)あなたはDISTINCT使用することができますがshop_id関数を使用して、グループ化しようとするすべてのデータがすべて一意の値であることを確認します。

あなたはこのような何かを行うことができます:

SELECT shop_id, COUNT(DISTINCT promotion_code) as total_entries FROM tbl GROUP BY shop_id

関連する問題