2017-04-06 5 views
2

이 작은 연습에서는 "Zoetermeer"의 사람들을 먼저 표시하고 이름을 지정해야합니다. 이름이 같은 사람들은 "bondsnr"으로 주문해야합니다. 고유 번호) "Zoetermeer"가 아닌 사람은 "bondsnr"만으로 정렬해야합니다.PostgreSQL은 특정 값을 먼저 표시하고 다른 기준으로 정렬합니다.

select spelersnr, naam, plaats, bondsnr 
from spelers 
where bondsnr is not null 
order by case when plaats = 'Zoetermeer' then 1 
      else 2 end, 
      bondsnr 

이것은 내가 지금 가지고있는 것이지만 정확하지 않으며 해결책을 찾지 못하는 것 같습니다. 는 "Zoetermeer의"첫 작품에서 사람들을 정렬하지만 난

spelersnr naam  plaats  bondsnr  
    27  Cools  Zoetermeer 2513 
    104 Moerman  Zoetermeer 7060 
    44 Bakker, de  Rijswijk 1124 
    112 Baalen, van Rotterdam 1319 
    83 Hofland   Den Haag 1608 
    2 Elfring   Den Haag 2411 
    8 Niewenburg  Rijswijk 2983 
    57 Bohemen, van Den Haag 6409 
    100 Permentier  Den Haag 6524 
    6 Permentier  Den Haag 8467 

이 어떻게해야 그들의 수

편집하여 동일한 이름을 가진 사람들을 정렬 할 수 있습니다 방법을 모르겠어요. 내 대답은 동일한 결과를 보여 주지만 정확하지 않습니다. 같은 장소에 사는 경우 이름순으로 주문하지 않기 때문에 생각합니다.

+0

0, 우리에게 약간의 샘플 결과를보기 당신이 그것을 원하는 방식으로 정렬됩니다. (서식있는 텍스트와 마찬가지로) – jarlh

답변

1

개별 열뿐만 아니라 records까지도 쿼리를 정렬 할 수 있습니다.
내가 제대로 귀하의 요구 사항을 이해 그래서 경우 :

select spelersnr, naam, plaats, bondsnr 
from spelers 
where bondsnr is not null 
order by 
    case 
    when plaats = 'Zoetermeer' then 
     (1,naam,bondsnr) 
    else 
     (2,null::text,bondsnr) 
    end; 
+0

고맙습니다. 나는 몰랐습니다! – DreamsInHD

1

당신이 원하는 기준에 따라 다음의 int에 부울 주문을 시전 할 수 있습니다.

예 : 진정한

논리 값에 대한
with a (a, b, c) as (values (1, 2, 3), (2, 1, 3), (1, 3, 2), (2, 3, 2)) 
select * from a order by (a.a = 2)::int desc, b desc; 
a | b | c 
---+---+--- 
2 | 3 | 2 
2 | 1 | 3 
1 | 3 | 2 
1 | 2 | 3 
(4 rows) 

db_example=# with a (a, b, c) as (values (1, 2, 3), (2, 1, 3), (1, 3, 2), (2, 3, 2)) 
db_example-# select * from a order by (a.a = 2)::int desc, b asc;             
    a | b | c                            
---+---+---                            
    2 | 1 | 3                            
    2 | 3 | 2                            
    1 | 2 | 3                            
    1 | 3 | 2                            
(4 rows) 

는 1이되고 거짓이

+0

답변 해 주셔서 감사합니다. – DreamsInHD

관련 문제