[PostgreSQL] Order by conditie, bug of onbekende functie?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 08:41
Ik kwam er gisteren bij toeval achter dat ik een query kan uitvoeren waarvan ik nog nooit had gehoord. Schiet mijn kennis te kort of gaat het hier om een fout in PostgreSQL? Het gaat hierom en dan specifiek de order by conditie.
SQL:
1
2
3
4
5
6
select
    *
from
    foo
order by
    bar = 1;


Postgres type-checked wel de vergelijking en hij voert de query gewoon uit, maar verder heeft de conditie geen enkele invloed (denk ik).

Iemand die hier meer over weet? Het gaat om PostgreSQL 9.4.

Sinds de 2 dagen regel reageer ik hier niet meer

Beste antwoord (via CurlyMo op 05-05-2016 20:32)


  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Gewoon prima statement volgens mij. Op het moment dat er een kolom bar is, komen er eerst de records naar voren die niet voldoen aan 'bar = 1', want false, dus 0. Vervolgens de resultaten die daar wel aan voldoen, want true, dus 1.

Hetzelfde dat je kunt doen, eerst alle even nummers, met vervolgens de oneven nummers:
code:
1
2
3
select *
from foo
order by bar%2

Alle reacties


Acties:
  • 0 Henk 'm!

  • Edwin88
  • Registratie: Januari 2005
  • Laatst online: 03-10 23:05
Een hele korte Google leert dat SQL conditionele order by constructies ondersteunt, dus Postgre zal het ook wel kunnen. Dat je dan een conditie invoert die niet uitmaakt is dan niet van belang.

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 08:41
Schiet mij maar lek :p

Als ik zoek op SQL conditional order by dan kom ik inderdaad resultaten tegen waarbij je via case bepaalt op welke kolom er gesorteerd dient te worden, maar ik kom geen resultaten tegen waarbij er direct een kolom wordt vergeleken met een waarde (of andere kolom).

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Gewoon prima statement volgens mij. Op het moment dat er een kolom bar is, komen er eerst de records naar voren die niet voldoen aan 'bar = 1', want false, dus 0. Vervolgens de resultaten die daar wel aan voldoen, want true, dus 1.

Hetzelfde dat je kunt doen, eerst alle even nummers, met vervolgens de oneven nummers:
code:
1
2
3
select *
from foo
order by bar%2

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 08:41
Feanathiel schreef op donderdag 05 mei 2016 @ 20:15:
Gewoon prima statement volgens mij. Op het moment dat er een kolom bar is, komen er eerst de records naar voren die niet voldoen aan 'bar = 1', want false, dus 0. Vervolgens de resultaten die daar wel aan voldoen, want true, dus 1.

Hetzelfde dat je kunt doen, eerst alle even nummers, met vervolgens de oneven nummers:
code:
1
2
3
select *
from foo
order by bar%2
Kijk, zo simpel kan het zijn. Nooit geleerd, maar wel handig. Dank!

Sinds de 2 dagen regel reageer ik hier niet meer