2012-12-06 5 views
3

테스트 데이터베이스 Advetureworks를 사용하고 있으며 결과에서 두 번째로 많은 수를 얻고 싶습니다. 그러나 나는 그것을 얻지 못하고 있습니다.쿼리 결과에서 두 번째로 큰 수를 얻어야합니다.

원하는 결과를 얻기 위해 다음과 같은 쿼리를 변경해야합니까?

select pa.City,psp.Name,COUNT(he.EmployeeID) as emp_count 
from HumanResources.EmployeeAddress hea 
join HumanResources.Employee he on he.EmployeeID=hea.EmployeeID 
join Person.Contact pc on pc.ContactID=he.ContactID 
join Person.Address pa on pa.AddressID=hea.AddressID 
join Person.StateProvince psp on psp.StateProvinceID=pa.StateProvinceID 
where COUNT(he.EmployeeID) < (select max(count(he.employeeid)) from HumanResources.Employee) 

group by pa.City,psp.Name 

답변

5

이 같은 그것을 시도, 기능 랭킹 사용할 수 있습니다

;WITH a AS (
    select pa.City,psp.Name,COUNT(he.EmployeeID) as emp_count 
    from HumanResources.EmployeeAddress hea 
    join HumanResources.Employee he on he.EmployeeID=hea.EmployeeID 
    join Person.Contact pc on pc.ContactID=he.ContactID 
    join Person.Address pa on pa.AddressID=hea.AddressID 
    join Person.StateProvince psp on psp.StateProvinceID=pa.StateProvinceID 
    group by pa.City,psp.Name 
), b AS (
    SELECT *, 
      ROW_NUMBER() OVER (ORDER BY emp_count DESC) num 
    FROM a 
) 
SELECT * 
FROM b 
WHERE b.num = 2 
+0

나는 그 어리석은 질문을 알고 있기 때문에 사전에 사과하고있다.. 그러나 나는 글을 쓰지 않고 group by 절에서 "*"를 사용할 수 있는지 알고 싶었다. cla에 의한 그룹 내의 모든 열의 이름/ – faizan

+0

그것은 어리석은 질문이 아닙니다. 쿼리의 SELECT 목록에 GROUP BY 절 또는 집계 열에있는 열만 넣을 수 있습니다. 즉 집계 함수에 의해 생성 된 열 COUNT(), SUM(), AVG() 등. 그렇지 않으면 컴파일 오류가 발생합니다. –

+0

답장을 보내 주셔서 감사합니다 ...... 또 하나의 질문은 ... 어떻게하면 더 많은 질문을 할 수 있습니까? – faizan

4

내가 이반 G에 의해 게시로 그 일의 ROW_NUMBER의 방법이 알고 있었다 그러나 나는 그렇게 여기 구문을 기억하지 않을 수 있습니다 조금 다른 접근법 :

with top_cities (City, Name, emp_count) as 
(
    select top 2 
    pa.City,psp.Name,COUNT(he.EmployeeID) as emp_count 
    from 
    HumanResources.EmployeeAddress hea 
    join HumanResources.Employee he on he.EmployeeID=hea.EmployeeID 
    join Person.Contact pc on pc.ContactID=he.ContactID 
    join Person.Address pa on pa.AddressID=hea.AddressID 
    join Person.StateProvince psp on psp.StateProvinceID=pa.StateProvinceID   
    group by 
    pa.City,psp.Name 
    order by 
    emp_count desc 
) 
select top 1 * from top_cities order by emp_count asc 
+0

귀하의 의견을 제공해 주셔서 감사합니다 ....... 정말 고맙게 생각하고 그것은 "상위"와 "행"기능을 모두 사용하여 새로운 관점을 부여했습니다 – faizan

+0

다른 방법으로 그룹에 열 이름을 추가하는 방법입니다 절을 별도로 명명하는 대신? – faizan

+0

문제 없습니다. 그러나 아니요, 당신은 group by 절에 컬럼의 이름을 정해야합니다. MSDN [http://msdn.microsoft.com/en-us/library/ms177673(v=SQL.105).aspx]에서 : "