我的表看起来像这样:
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;。
我不知道如何在一个查询中获得该结果。
我尝试使用子查询来查看有多少人在单个查询中收到了该电子邮件,但该组仍然不再有效。
对此的任何帮助都将非常感激。
答案 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
的每个值都没有一行。