2015-12-16 2 views
0

У меня есть следующий код:HAVING MAX (COUNT (*)) не работает

SELECT e.Student_ID, s.Name, s.Surname, Result_IS, COUNT(*) 
FROM Students s 
LEFT JOIN Exams e 
    ON e.Student_ID=s.Student_ID 
WHERE Result_IS='Negative' 
GROUP BY e.Student_ID, s.Name, s.Surname, Result_IS 
HAVING COUNT(*)= 
(
    SELECT MAX(COUNT(*)) FROM Exams 
    WHERE Student_ID=e.Student_ID 
    AND Result_IS='Negative' 
    GROUP BY e.Student_ID, s.Name, s.Surname, Result_IS 
) 

У меня проблема с HAVING COUNT(*), который должен выбрать строку, в которой COUNT(*) дал самый большой результат, но вместо этого он просто дать мне выход первого выбора, который является следующим:

The output

Я пытался все подобные вещи, но ничего не работает, чтобы выбрать строку, где граф является максимальным.

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

ответ

1

Почему бы не просто заказать по счету (*) по убыванию и выбрать топ 1?

SELECT top 1 e.Student_ID, s.Name, s.Surname, Result_IS, COUNT(*) FROM Students s LEFT JOIN Exams e 
ON e.Student_ID=s.Student_ID 
WHERE Result_IS='Negative' 
GROUP BY e.Student_ID, s.Name, s.Surname, Result_IS 
order by count(*) desc 

Я думаю, что это синтаксис Oracle

Select * FROM 
    (
      SELECT e.Student_ID, s.Name, s.Surname, Result_IS, COUNT(*) FROM Students s LEFT JOIN Exams e 
      ON e.Student_ID=s.Student_ID 
      WHERE Result_IS='Negative' 
      GROUP BY e.Student_ID, s.Name, s.Surname, Result_IS 
      order by count(*) desc 
) 
    Where rownum=1 
+1

Спасибо, но я знал, что этот метод уже и я не хотел, чтобы сделать это таким образом. Кстати, пока я выяснил, как это сделать. Но спасибо в любом случае :) –

+0

Вы должны написать свой ответ здесь для сообщества. – Wjdavis5

+1

PL/SQL - это процедурный язык Oracle. Вероятно, вы хотели сказать «Oracle SQL». А для Oracle вы должны быть осторожны в смешении 'rownum' и' order by' в том же запросе, потому что фильтр 'rownum' применяется до *' order by', поэтому результаты будут неверными. Вместо этого вам нужно что-то вроде: 'select * from (subquery-with-order-by), где rownum = 1'. – sstan

1

ли

HAVING COUNT(*)= 
(
SELECT MAX(COUNT(*)) FROM Exams 
WHERE Student_ID=e.Student_ID 
AND Result_IS='Negative' 
GROUP BY e.Student_ID, s.Name, s.Surname, Result_IS 
) 

запрос на присоединяемой таблицы. :)

0

Итак, я узнал, как это сделать, то решение следующее:

SELECT e.Student_ID, s.Name, s.Surname, Result_IS, COUNT(*) FROM Students s LEFT JOIN Exams e 
ON e.Student_ID=s.Student_ID 
WHERE Result_IS='Negative' 
GROUP BY e.Student_ID, s.Name, s.Surname, Result_IS 
HAVING COUNT(*)= 
(
SELECT MAX(count) from 
(
SELECT count(*) as count FROM Exams 
WHERE Result_Is='Negative' 
GROUP BY Student_ID 
) 
)