2017-11-07 6 views
0

とのことで私のテーブルには、以下のようになります。SQL:グループでは、二つの異なるクエリ

id sex mailsent_number click click_time 
1466 female  1    1  2017-08-14 10:01:28 
1467 female  1    1  2017-08-14 10:45:28 
1468 female  1    NULL 
1469 male   1    1  2017-08-14 10:11:28 
1470 male   1    NULL 
1471 male   0    NULL 

次のクエリは、私が欲しいものは基本的に私を取得します:クリックした各性別の何と

select sex, 
count(mailsent_number) - count(click) NoClick, 
count(click) Click 
from table group by sex; 

リストクリックしなかった人の数が表示されます。電子メールを受け取ったことのない人はカウントされません。

ここでclick_timeでクリックをフィルタリングしたいと思います。その後、クリックの量は正しいですが、「いいえクリック」の量

select sex, 
count(mailsent_number) - count(click) NoClick, 
count(click) Click 
from table where (click_time < '2017-08-14 10:30' or click_time is null) group by sex; 

:だから私は、各性の多くは、2017年8月14日午前10時30分前にクリックされたどのように私はこれを行うかどうかを知りたいです10時30分以降にクリックしたユーザーはカウントされませんが、「クリックなし」とカウントする必要があります。

私は1つのクエリでどのようにその結果を得ることができるのか分かりません。

サブクエリを使用して、個々のクエリでメールを受け取った人の数を調べるだけでしたが、グループはもう動作しません。

ご迷惑をおかけして申し訳ございません。

答えて

0

私はあなたが欲しいロジックがwhere句であると仮定:MySQLは真または偽と評価ブール式、としてsex and click_time < '2017-08-14 10:30' or click_time is nullを扱いますので、あなたのクエリが動作しているよう

select sex, count(mailsent_number) - count(click) as NoClick, 
     count(click) as Click 
from table 
where click_time < '2017-08-14 10:30' or click_time is null 
group by sex ; 

理由があります。これで2行が生成されますが、各値に1つの値はありませんsex

+0

お返事ありがとうございました。申し訳ありませんまだ編集中です。コピー/貼り付けエラーが発生しました。私は明らかに2番目の声明で "where句"を持っていますが、それは動作しますが、私が探している結果を私に与えることはありません。それはまた、行だけを見るので、私のwhere節にマッチする意味があります。しかし、私は電子メールを受け取ったすべての人を数える必要があり、その数から、私が選択した期間にちょうどクリックした人の数を取る必要があります。 –

+0

上記のテーブルの値に基づいて、 'count(mailsent_number)-count(click)= ??'と 'count(click)= ??'の期待値を与えてください。 値1と0は考慮されるべきである、右か? – Mohamad

+0

期待値はありません。click_time where節はありません:count(mailsent_number) - count(click)= 2、count(click)= 3、click_time where節をcount(mailsent_number) click_time> 10:30の1つのエントリがないため、count(mailsent_number) - count(click)= 2とcount(click)= 2を取得します。まったく数える –

関連する問題