2016-10-07 19 views
0

私は電子メールアドレスのユーザーと電子メールIDを格納したテーブルを持つニュースレターツールを作成し、送信されたすべての電子メールに対して開かれた合計とユニークを計算します。SQLは同じテーブルを選択してカウントします

私は、電子メールアドレスのユーザーと、ユーザーが電子メールを開いた回数を区別する詳細ページを表示したいと考えています。 dbテーブルの

例:

email_id | user_id | user 
---------------------------- 
1 | 1 | [email protected] 
1 | 1 | [email protected] 
1 | 1 | [email protected] 
1 | 2 | [email protected] 
1 | 3 | [email protected] 
1 | 4 | [email protected] 
1 | 4 | [email protected] 

ウェブ結果:

私は、次のクエリを試してみましたが、それは最初の行だけのために働く、それは残りの部分を切り捨て:

SELECT DISTINCT user, count(DISTINCT user) as counttotal 
FROM newsletter_log 
where email_id = 1 
+0

どのようにSELECTユーザー、COUNT( 'について*)AS counttotal FROM newsletter_log WHERE email_id = 1 GROUP BY user'? –

+0

どのDBMSを使用していますか? –

+0

それは動作します!ありがとう:) @FelixPamittan – Otto

答えて

3

単にGROUP BYを実行してください。カウントするにはCOUNT(*)を使用してください。

select user, count(*) as counttotal 
FROM newsletter_log 
where email_id = 1 
group by user 
+0

それは動作する!ありがとうございました!とても簡単でした:( – Otto

1

これを試してください。

select user,count(user) as times from newsletter_log where email_id = 1 group by user 

別名を使用する必要はありません。グループを使ってください。

+0

それは動作します!ありがとう!:) – Otto

1

概念は、ユーザーグループに基づいてカウントを取得するようなものです。ユーザーをグループと見なし、グループごとにカウントします。知識

select user, count(1) as cnt 
FROM newsletter_log 
where email_id = 1 
group by user 

、あなたは合計含めるには(1)など

1

をカウントし、カウント数(*)のような様々なカウントパターンを学ぶことができます。

SELECT email, IsNull(User, 'Total'), COUNT(User) [Count] 
FROM newsletter_log 
WHERE email = 1 
GROUP BY email, User 
    WITH (ROLLUP) 
ORDER BY COUNT(User) DESC 
関連する問題