2014-03-02 2 views
2

мне нужно запустить следующие 3 Выберите запросы:MySQL - попытка объединить 3 ВЫБИРАЕТ в один

SELECT profile_gender AS Gender, COUNT(*) AS Users FROM login GROUP BY profile_gender; 

SELECT profile_gender AS Gender, COUNT(*) AS Users FROM login WHERE profile_createdate > DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY profile_gender; 

SELECT profile_gender AS Gender, COUNT(*) AS Users FROM login WHERE profile_createdate > DATE_SUB(CURDATE(), INTERVAL 7 DAY) GROUP BY profile_gender; 

profile_gender либо 0 или 1, и находится в той же колонке. Возможно ли получить эту информацию в одном запросе? Это немного выше моих запросов.

благодаря

+0

Вы всегда можете использовать 'UNION' –

ответ

3

Вы можете сделать это с помощью условной агрегации:

SELECT profile_gender AS Gender, COUNT(*) AS Users, 
     sum(profile_createdate > DATE_SUB(CURDATE(), INTERVAL 1 DAY) as cnt_1day, 
     sum(profile_createdate > DATE_SUB(CURDATE(), INTERVAL 7 DAY) as cnt_7day 
FROM login 
GROUP BY profile_gender; 
4

Do подсчета в фактическом списке полого:

SELECT profile_gender AS Gender, 
    SUM(profile_createdate > (CURDATE() - INTERVAL 1 DAY)) AS Day1, 
    SUM(profile_createdate > (CURDATE() - INTERVAL 7 DAY)) AS Day7, 
    COUNT(profile_createdate) AS Total 
FROM login 
GROUP BY profile_gender 

Булевых результаты > сравнений получить напечатанные на простые целое 0 или 1 по MySQL, который затем может быть SUM()-й издом ,

Смежные вопросы