2013-04-16 2 views
2

Мне нужно запустить отчет об общем количестве учащихся в день. Проблема, с которой я сталкиваюсь, заключается в том, что в моем подзапросе я не могу сделать подходящую группу, чтобы в течение дня я хотел знать, сколько из них поступило по определенной причине.Проблема с подзапросом

Мой запрос:

SELECT 
    DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
    COUNT(session.session_id) 'Total', 
    (SELECT COUNT(aidyear) FROM session WHERE aidyear = '12-13') '12-13',   
    (SELECT COUNT(aidyear) FROM session WHERE aidyear = '13-14') '13-14' 
FROM session 
WHERE status = '3' 
GROUP BY Date; 

Полученный отчет:

+-------------+-------+-------+-------+ 
| Date  | Total | 12-13 | 13-14 | 
+-------------+-------+-------+-------+ 
| Apr 15 2013 | 47 | 38 | 25 | 
| Apr 16 2013 |  5 | 38 | 25 | 
+-------------+-------+-------+-------+ 
2 rows in set (0.00 sec) 

Как вы заметили, на 16 апреля 2013 года есть в общей сложности только 5 студентов. Теперь обратите внимание, что 12-13 13-14 для обеих строк одинаковы.

Когда я пытаюсь сделать группу, в подзапросе я получаю эту ошибку:

ERROR 1241 (21000): Операнд должен содержать 1 столбец (ы)

означает, что подзапрос возвращает более одной строки в мое понимание.

Я пытался с этим запросом:

SELECT 
     DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
     COUNT(session.session_id) 'Total', 
     (SELECT DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
     COUNT(aidyear) FROM session WHERE aidyear = '12-13' GROUP BY Date) '12-13', 
     (SELECT DATE_FORMAT(session.signintime, '%b %d %Y') Date, COUNT(aidyear) FROM session WHERE aidyear = '13-14' GROUP BY Date) '13-14' 
FROM session WHERE status = '3' 
GROUP BY Date; 

Редактировать 1 В соответствии с просьбой Evan

В таблице я запрашивая из только таблицы сессии. Я не присоединяющиеся (как вы заметили)

Таблица имеет следующие:

Primary Key : session_id 
Foreign Key : anum(which is a student ID) 

Тогда мы имеем: why, aidyear, signintime, studentcomments, status

+0

Не могли бы вы предоставить нам макет таблиц, запрашиваемых вместе с некоторыми примерами данных? –

+0

Обновлено оригинальное сообщение. –

+0

И эти данные на самом деле являются живыми данными, я заметил этот глюк, и я был похож на uh-oh .. –

ответ

3

Похоже, вы должны быть в состоянии использовать CASE с заполнителем :

SELECT DATE_FORMAT(session.signintime, '%b %d %Y') Date, 
    COUNT(session.session_id) 'Total', 
    sum(case when aidyear = '12-13' then 1 else 0 end) '12-13', 
    sum(case when aidyear = '13-14' then 1 else 0 end) '13-14' 
FROM session 
WHERE status = '3' 
GROUP BY Date; 
+0

Чувак, ваш потрясающий мужчина! Я даже не знал о CASE. Большое спасибо, и это работает! –

+0

@RixhersAjazi Добро пожаловать! – Taryn

+0

Забыл попасть в зеленый чек, я вместо этого сделал +1. –

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