У меня есть таблица с именем users
с столбцом activated_at
, и я хочу подсчитать, сколько пользователей было активировано, проверяя, является ли столбец нулевым или нет. А затем отображать их бок о бок, как это:Как реорганизовать этот SQL-запрос?
+----------+-----------+---------------+-------+
| Malaysia | Activated | Not Activated | Total |
+----------+-----------+---------------+-------+
| Malaysia | 5487 | 303 | 5790 |
+----------+-----------+---------------+-------+
Так что это мой SQL:
select "Malaysia",
(select count(*) from users where activated_at is not null and locale='en' and date_format(created_at,'%m')=date_format(now(),'%m')) as "Activated",
(select count(*) from users where activated_at is null and locale='en' and date_format(created_at,'%m')=date_format(now(),'%m')) as "Not Activated",
count(*) as "Total"
from users
where locale="en"
and date_format(created_at,'%m')=date_format(now(),'%m');
В моем коде, я должен указать все заявления, где три раза, что, очевидно, излишним. Как я могу реорганизовать это?
С уважением, MK.
Я собирался сказать это, но проверял мои ссылки. :) – GrayWizardx
См. для получения более подробной информации об использовании CASE ... КОГДА с MySQL. –
MySQL принуждает TRUE к 1, так что вы можете просто сделать это, например. SUM (activate_at IS NOT NULL), не требуется CASE. –