2016-06-03 3 views
1

SQL 서버 관리 스튜디오 2012를 사용하고 있으며이 테이블에서 처음으로 실패한 과목 (실패한 상태는 < 5.0 포인트)을 보여주는 쿼리를 작성해야합니다.SQL 서버에서 쿼리하는 중

SELECT SubjectID 
FROM Result(NAME OF the TABLE) 
WHERE [First/Second_Time] = 1 AND Point < 5 
GROUP BY SubjectID 
HAVING count(point) >= ALL 
(
    SELECT count(point) 
    FROM Result 
    WHERE [First/Second_Time] = 1 AND point < 5 
    GROUP BY SubjectID 
) 

내가 가진 쿼리를 만들기위한 이유를 이해하지 : 여기

StudentID | SubjectID | First/Second_Time | Point. 
1  | 02  |   1   | 5.0 
2  | 04  |   2   | 7.0 
3  | 03  |   2   | 9  
... etc 

는 선생님의 질문입니다. Count(point)은 항상 >=all(select count(point) from Result where First/Second_Time=1 and point<5 group by SubjectID)이므로 isnt입니까? 이며 피험자가 대부분의 학생의 실패를 처음으로 나타내지는 않습니다. 미리 감사드립니다. 나쁜 영어에 대해 죄송합니다.

+0

mysql 또는 sql-server에 있습니까? –

+0

나는 SQL 서버에있다 – Wick

+0

MySQL는 SQL 서버가 아니다. SQL Server를 사용하는 경우에는 MySQL과 같은 다른 DBMS 용 태그를 추가하지 마십시오. 태그는 여기에 의미가 있습니다 - 질문에 실제로 관련된 태그 만 추가하십시오. 이전에 들었던 것처럼 들리던 사람들을 잡아서는 안됩니다. 태그 적용 여부를 잘 모르는 경우 태그 설명을 읽으십시오. 확실하지 않은 경우 추가하지 마십시오. 누군가 필요한 경우 여기에 추가됩니다. 감사. –

답변

1

하위 쿼리는 첫 번째 시도에서 실패한 횟수의 목록을 반환합니다. 사람이 한 번 두 번 수학과 과학을 실패하면

SELECT SubjectID, count(point) 
    FROM Result 
    WHERE [First/Second_Time] = 1 AND point < 5 
    GROUP BY SubjectID 

그래서, 하위 쿼리가 반환 :

2 
1 

당신이 원하는 당신이 이런 식으로 실행하면 당신이 무엇을하고 있는지를 참조하는 것이 더 쉬울 수 있습니다 어떤 과목이 가장 실패했는지 알 수 있습니다 (이 경우 두 번 이상 실패한 과목은 하위 쿼리에서 실패 횟수가 가장 많기 때문입니다). 다시 계산하면 (도 주제가 그룹화되어), having을 사용하면 2 개 이상의 실패 (하위 쿼리의 가장 높은 값보다 크거나 같은)가있는 제목 만 반환 할 수 있습니다. 예 : https://msdn.microsoft.com/en-us/library/ms178543.aspx

1

당신이 수업을 위해 프로젝트 작업을하고있는 것처럼 들리므로 나는 이것에 답해야 할지도 모르겠지만 여기에 있습니다. 질문은 왜 절이 있습니까? havingall에 대한 설명을 읽었습니까?

모두 "스칼라 값을 단일 열 집합의 값과 비교합니다." 이 경우의 스칼라 값은 count (포인트) 또는 포인트가 5보다 작은 주제 ID의 발생 횟수입니다.이 경우 단일 열 세트는 모든 주제의 발생 횟수 목록으로, 5 점.

비교의 최종 결과는 "> ="입니다. 서브 쿼리의 모든 값이 참이면 "모두"는 참으로 평가됩니다. 하위 쿼리는 < 5 및 첫 번째 요구 사항을 충족하는 모든 과목 수를 반환합니다. < 5 및 첫 번째 기준을 충족하는 세 개의 주제가 있고 1,2,3 번 빈도가있는 경우 기본 검색어는 세 가지 "결과"를 갖습니다. 1,2,3. 주 쿼리 결과 각각은 true를 평가하기 위해 주 값에 대한 하위 쿼리 결과 각각> =이어야합니다. 따라서 단계별로 진행하면 첫 번째 주 값 1은> = 1이지만> = 2가 아니므로 "having"이 거짓이므로 1 개가 떨어집니다. 두 번째 주요 값 2는> = 1이고> = 2이지만> = 3이 아니므로 삭제됩니다. 세 번째 값인 3은> 1, 2 및 3으로 true를 평가하므로 가장 높은 빈도로 피사체가 반환됩니다.

"All"키워드에 대한 MSDN 토론의 "설명"절에 명확하게 나와 있지만 특정 응용 프로그램과는 관련이 없습니다.

MSDN은 우리 친구입니다!

+0

Desc의 주문과 동일한 작업을 수행 할 수 있습니까? – Wick

+0

절대적으로 ... 상위 1 위를 count로 선택 ... 하위 쿼리에서 max를 사용하여 동일한 작업을 수행 할 수 있지만 (예전에이 작업을 수행했음을 확신), "여기 내 선생님 쿼리가 있습니다." 당신은 모든 기능을 가리키고 있습니다 –

+1

SELECT 상단 1 SubjectID FROM 결과 (테이블의 이름) WHERE [First/Second_Time] = 1 AND Point <5 GROUP BY SubjectID ORDER BY Count (Point) desc –

관련 문제