Переключить регистр в совокупном запросе - PullRequest
2 голосов
/ 18 апреля 2011

Я хочу, чтобы в моем запросе SQL был регистр переключения, чтобы, когда группа по не группировала какой-либо элемент, я не хочу агрегировать, в противном случае я хочу. Это возможно.

мой запрос выглядит примерно так:

select count(1),AVG(student_mark) ,case when Count(1)=1 then student_subjectid else null end from Students
group by student_id

я получаю эту ошибку. Столбец 'student_subjectid' недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Заранее спасибо ..

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011
SELECT
  student_id,
  COUNT(*) AS MarkCount,
  AVG(student_mark) AS student_mark,
  CASE COUNT(*) WHEN 1 THEN MIN(student_subjectid) END AS student_subjectid
FROM Students
GROUP BY student_id
1 голос
/ 18 апреля 2011

С чего бы вам это усложнять?

select count(1), AVG(Student_mark) Student_mark
from Students
group by student_id

Если есть только один показатель student_mark, это также SUM, AVG, MIN и MAX - так что просто продолжайте использовать агрегат!


EDIT

Набор данных, который будет соответствовать вашему требованию, обычно не имеет смысла. Чтобы достичь этого, можно объединить (объединить) два разных результата

select
    numRecords,
    Student_mark,
    case when numRecords = 1 then student_subjectid end    # else is implicitly NULL
from
(
select
    count(1) AS numRecords,
    AVG(Student_mark) Student_mark,
    min(student_subjectid) as student_subjectid
from Students
group by student_id
) x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...