2012-04-17 3 views
1

На данный момент у меня есть 2 разных MySQL запросы:Добавить 1 Колум результата тузды в результате другого тузда результата

Запрос 1

SELECT monthname(calendar.datefield) AS date, 
    year(calendar.datefield) as year, calendar.datefield, COUNT(all_griefs_tbl.actioned_status) AS total_griefs, 
    all_griefs_tbl.actioned_status, all_griefs_tbl.game 
FROM all_griefs_tbl 
RIGHT JOIN calendar 
    ON (DATE(all_griefs_tbl.actioned_date) = calendar.datefield) 
    AND all_griefs_tbl.actioned_status = 'accepted' 
WHERE calendar.datefield 
    BETWEEN DATE_ADD(CURDATE(), INTERVAL -12 MONTH) AND CURDATE() 
GROUP BY year(calendar.datefield) DESC , month(calendar.datefield) DESC 

Query 2

SELECT monthname(calendar.datefield) AS date, 
    year(calendar.datefield) AS year, calendar.datefield, 
    COUNT(all_griefs_tbl.actioned_status) AS total_submitted, 
    all_griefs_tbl.actioned_status, all_griefs_tbl.game 
FROM all_griefs_tbl 
RIGHT JOIN calendar 
    ON (DATE(all_griefs_tbl.date) = calendar.datefield) 
WHERE calendar.datefield BETWEEN DATE_ADD(CURDATE() , INTERVAL -12 MONTH) AND CURDATE() 
GROUP BY year(calendar.datefield) DESC , month(calendar.datefield) DESC 

Теперь разница между ними в запросе 1 Я подсчитываю количество принятых гонений в месяц и в запросе 2 Я подсчитываю количество записей, представленных в месяц - подсчет разных столбцов

Что я хочу сделать, либо a) получить это в один запрос, либо b) иметь возможность объединить результаты в 1 таблицу.

Я хочу выход быть следующим:

Month   Year   Total Griefs Total Submitted 
    ------------ ------------ ------------ ------------ 
    April   2012   14   2  
    March   2012   0    8 
    February  2012   0    6 
    January  2012   0    13 
    December  2011   0    7 
    November  2011   0    10 
    October  2011   0    0 
    September  2011   0    0 
    August  2011   0    6 
    July   2011   0    3 
    June   2011   0    2 
    May   2011   0    0 
    April   2011   0    0 

Возможно ли это, или я ложному дерево целиком?

Спасибо!

+0

Благодарим за редактирование John. – eek

ответ

3

Вы можете сделать это в одном запросе:

SELECT 
    monthname(calendar.datefield) AS date, 
    year(calendar.datefield) as year, 
    calendar.datefield, 
    SUM(IF(all_griefs_tbl.actioned_status = 'accepted', 1, 0)) AS total_griefs, 
    COUNT(all_griefs_tbl.actioned_status) AS total_submitted, 
    all_griefs_tbl.actioned_status, 
    all_griefs_tbl.game 
FROM 
    all_griefs_tbl 
RIGHT JOIN 
    calendar ON (DATE(all_griefs_tbl.actioned_date) = calendar.datefield) 
WHERE 
    calendar.datefield BETWEEN DATE_ADD(CURDATE(), INTERVAL -12 MONTH) AND CURDATE() 
GROUP BY year(calendar.datefield) DESC , 
    month(calendar.datefield) DESC 

EDIT: Это немного неортодоксальные, но это будет (скорее всего) даст вам то, что вы после:

SELECT 
    month(date_add(curdate(), interval seq.mm months)), 
    year(date_add(curdate(), interval seq.mm months)), 
    (SELECT count(1) 
     FROM all_griefs_tbl 
     WHERE actioned_status = 'accepted' 
     AND month(action_date) = month(date_add(curdate(), interval seq.mm months)) 
     AND year(action_date) = year(date_add(curdate(), interval seq.mm months))) as total_griefs 
    (SELECT count(1) 
     FROM all_griefs_tbl 
     AND month(date) = month(date_add(curdate(), interval seq.mm months)) 
     AND year(date) = year(date_add(curdate(), interval seq.mm months))) as submitted_griefs 
FROM 
    (SELECT -12 as mm UNION SELECT -11 as mmUNION SELECT -10 as mmUNION SELECT -9 as mm 
    UNION SELECT -8 as mm UNION SELECT -7 as mm UNION SELECT -6 as mm UNION SELECT -5 as mm 
    UNION SELECT -4 as mm UNION SELECT -3 as mm UNION SELECT -2 as mm UNION SELECT -1 as mm) seq 
ORDER BY 
    mm 
+0

Это близко, но я понял, что пропустил что-то из своего оригинального поста. При подсчете общего количества представленных я использую календарь «ПРАВОЙ JOIN» ВКЛЮЧЕН (DATE (all_griefs_tbl.date) = calendar.datefield) вместо «ПРАВОЙ КАБРИОЖНЫЙ календарь ВКЛ» (DATE (all_griefs_tbl.actioned_date) = calendar.datefield) ' – eek

+0

@eek Я обновил мой ответ с другим заявлением, чтобы ответить на ваш комментарий. –

+0

Его возвращение «Неизвестный столбец» calendar.datefield 'in' where clause '"- Я понятия не имею, почему, потому что, если честно, я не очень понимаю ваш запрос Aleks :) – eek

0

Вы можете использовать UNION с запросом, если результат тот же из двух запросов.

Так добавить NULL AS total_griefs, и NULL AS total_submitted, к запросам, поэтому выход соответствует

0

Попробуйте это (я действительно не могу проверить)

SELECT monthname(calendar.datefield) AS date, 
     year(calendar.datefield) as year, 
     calendar.datefield, 
     SUM(CASE all_griefs_tbl.actioned_status 
       WHEN 'accepted' THEN 1 
       ELSE 0 
      END CASE) AS total_griefs, 
     COUNT(all_griefs_tbl.actioned_status) AS total_submitted, 
     all_griefs_tbl.actioned_status, 
     all_griefs_tbl.game 
FROM all_griefs_tbl RIGHT JOIN calendar 
    ON DATE(all_griefs_tbl.actioned_date) = calendar.datefield 
WHERE calendar.datefield 
    BETWEEN DATE_ADD(CURDATE(), INTERVAL -12 MONTH) AND CURDATE() 
GROUP BY year(calendar.datefield) DESC, 
     month(calendar.datefield) DESC 
Смежные вопросы