2015-12-16 66 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

为什么不按数量(*)desc排序并选择top 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 

我觉得这是O​​racle

语法
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)where 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 
) 
)