SQL:使用两个不同的查询进行分组

时间:2017-11-07 11:55:22

标签: mysql sql group-by

我的表看起来像这样:

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过滤点击次数。所以我想知道在2017-08-14 10:30之前点击了多少性别如果我这样做:

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;

然后点击量仍然是正确的,但是没有点击次数&#34;是错误的,因为在10:30之后点击的人根本没有计算,但应该算作&#34;没有点击&#34;。

我不知道如何在一个查询中获得该结果。

我尝试使用子查询来查看有多少人在单个查询中收到了该电子邮件,但该组仍然不再有效。

对此的任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

我假设你想要的逻辑是where子句:

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 ;

您的查询似乎有效的原因是因为MySQL将sex and click_time < '2017-08-14 10:30' or click_time is null视为布尔表达式,其计算结果为true或false。然后生成两行,但sex的每个值都没有一行。