[SQL] sorting vraag

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • rmfloris
  • Registratie: Maart 2002
  • Laatst online: 22-11-2024

rmfloris

Kowalski: Kaboeeem??

Topicstarter
Ik zit met een sorterings vraagstuk. Ik heb een tabel met drie kolommen: gebied, hotel en prijs. Nu wil ik een bepaalde sortering toepassen, maar ik vraag me af of het mogelijk is. Ik wil namelijk sorteren op laagste prijs maar in combinatie met het gebied. Dus laat eerste het gebied zien met de laagste prijs gevolgd door de verschillende hotels in dat gebied, dan het volgende gebied etc.

Is dit wel mogelijk met mysql of zal ik hiervoor iets moeten bedenken in de output file?

Foto afdrukken prijsvergelijk -> http://www.fotovergelijk.nl


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
ORDER BY Gebied, Prijs, Hotel :?

Je kunt gewoon op meerdere kolommen sorteren.

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • Icekiller2k6
  • Registratie: Februari 2005
  • Laatst online: 11-09 22:37
Of Group by..

Afhankelijk van hoe of wat..

MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000


Acties:
  • 0 Henk 'm!

  • rmfloris
  • Registratie: Maart 2002
  • Laatst online: 22-11-2024

rmfloris

Kowalski: Kaboeeem??

Topicstarter
Sort by werkt helaas niet zoals ik wens. Een voorbeeld data set:

gebiedhotelprijs
AAy20
AAd10
AAf30
BBv15
BBg45
CCa5


Als je nu een sort by price, gebied doet, krijg je de prijs laag naar hoog en bij dezelfde prijs de sortering op gebied. Sortering op gebied lat bovenstaande volgorder zien.
Ik wil graag op prijs sorteren, dus eerste gebied C, dan gebied A met de drie hotels, en dan alle hotels van gebied B.

Hoe de group by kan helpen snap ik niet. Misschien iets meer uitleg?

Foto afdrukken prijsvergelijk -> http://www.fotovergelijk.nl


Acties:
  • 0 Henk 'm!

  • asfaloth_arwen
  • Registratie: Februari 2005
  • Laatst online: 12:44
group by gebied, order by prijs zou voldoende moeten zijn.

Specs


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
asfaloth_arwen schreef op zondag 31 juli 2011 @ 15:08:
group by gebied, order by prijs zou voldoende moeten zijn.
Icekiller2k6 schreef op zondag 31 juli 2011 @ 14:45:
Of Group by..

Afhankelijk van hoe of wat..
Ik zie even niet hoe een group by hier gaat helpen :?

Ik zou dit oplossen in de presentatielaag.

[ Voor 30% gewijzigd door RobIII op 31-07-2011 15:22 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • parm
  • Registratie: Oktober 2005
  • Laatst online: 19-08 21:30
ORDER BY Prijs DESC, Gebied ASC

[ Voor 38% gewijzigd door parm op 31-07-2011 15:29 ]


Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 03-09 23:24
Als je het de gebieden in de volgorde C, A, B wilt hebben kan dat niet (makkelijk) in SQL voor zover ik weet.
Ik zou het, net zoals RobIII, in de prestatielaag doen.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Group wise maximum...

Je kan het bijv als volgt doen.
SQL:
1
2
3
4
5
6
7
select gebied,prijs,hotel
from hotels
inner join (select gebied, MIN(price) as lowestprice
    from hotels
    group by gebied) as t on (hotels.gebied=t.gebied)
group by gebied,prijs,hotel
order by lowestprice,gebied, prijs,hotel

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gomez12 schreef op zondag 31 juli 2011 @ 15:45:
Group wise maximum...

Je kan het bijv als volgt doen.
SQL:
1
2
3
4
5
6
7
select gebied,prijs,hotel
from hotels
inner join (select gebied, MIN(price) as lowestprice
    from hotels
    group by gebied) as t on (hotels.gebied=t.gebied)
group by gebied,prijs,hotel
order by lowestprice,gebied, prijs,hotel
8)7 Goeiemorgen :P
Dat is inderdaad correct (behalve price/prijs typo :P ). Waarom ik dat niet zag mag Joost weten; heb de slaap nog in mijn ogen denk ik :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
RobIII schreef op zondag 31 juli 2011 @ 15:55:
[...]

8)7 Goeiemorgen :P
Dat is inderdaad correct (behalve price/prijs typo :P ). Waarom ik dat niet zag mag Joost weten; heb de slaap nog in mijn ogen denk ik :P
Ik vraag me af eigenlijk af of die correct is...

Mysql zal hem vast slikken, maar orderen op iets waarop niet gegroupeerd is?
Ik gok zomaar even dat je volgens de sql spec enkel mag orderen op velden in je select. Maarja daar hebben we trial & error voor :)

Btw qua sortering : Probeer het eerst eens in 1 zin op papier uit te schrijven dan zie je sneller welke richting je query op moet gaan. Zo zie je in de TS al dat het gaat om het gebied met de laagste prijs, deze moet je dus ergens erbij "toveren" in een extra subquery.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gomez12 schreef op zondag 31 juli 2011 @ 16:12:
Mysql zal hem vast slikken, maar orderen op iets waarop niet gegroupeerd is?
Ik gok zomaar even dat je volgens de sql spec enkel mag orderen op velden in je select. Maarja daar hebben we trial & error voor :)
Het werkt in MySQL iig wel (maar het zou inderdaad niet moeten mogen kunnen). En anders zet je 'm gewoon ook in je group by? Of slaap ik nou nog? :P

[edit]
Euh, wacht... WTF? Ergens ben ik de draad kwijt volgens mij :P GoT-ten met 2 rondrennende en krijsende kids is niet heel erg goed voor je concentratie :P

[ Voor 20% gewijzigd door RobIII op 31-07-2011 16:24 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
RobIII schreef op zondag 31 juli 2011 @ 16:20:
[...]
Euh, wacht... WTF? Ergens ben ik de draad kwijt volgens mij :P GoT-ten met 2 rondrennende en krijsende kids is niet heel erg goed voor je concentratie :P
offtopic:
Tja, dat krijg je nou eenmaal als je je prioriteiten verkeerd sorteert :)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Maar is die sortering überhaupt intuïtief? Begrijpt de gebruiker dat wel? Het lijkt mij dat je gewoon op prijs óf gebied sorteert, en maar filtert op gebied als je per se prijzen binnen een gebied wilt zien?

{signature}


Acties:
  • 0 Henk 'm!

  • rmfloris
  • Registratie: Maart 2002
  • Laatst online: 22-11-2024

rmfloris

Kowalski: Kaboeeem??

Topicstarter
Ik ga de oplossingen uitproberen.
Voutloos schreef op zondag 31 juli 2011 @ 16:51:
Maar is die sortering überhaupt intuïtief? Begrijpt de gebruiker dat wel? Het lijkt mij dat je gewoon op prijs óf gebied sorteert, en maar filtert op gebied als je per se prijzen binnen een gebied wilt zien?
De sortering is van belang in de presentatie van de informatie, de gebruiker zoekt een combinatie van gebied en prijs. Om het netjes te laten zien wil ik sorteren op gebied, maar dan wel het gebied met het goedkoopste hotel als eerste. Tbv de presentatie wil ik dan de overige hotels in dat gebied laten zien. Als de gebruiker het gebied niks vind, kan deze gelijk naar het volgende gebied met de 2e beste prijs etc.

Foto afdrukken prijsvergelijk -> http://www.fotovergelijk.nl


  • lapismontes
  • Registratie: September 2011
  • Laatst online: 21-08 16:13
Misschien een beetje overbodig om een oud topic te laten herleven, maar in SQL is hier uitstekend een oplossing voor te vinden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
select * from hotels
order by
  min(prijs) over (partition by gebied)
, prijs;
 gebied | hotel | prijs 
--------+-------+-------
 C      | Ca    |  5.00
 A      | Ad    | 10.00
 A      | Ay    | 20.00
 A      | Af    | 30.00
 B      | Bv    | 15.00
 B      | Bg    | 45.00
(6 rows)


deze 'trucjes' vallen onder de window functions van sql, heel erg handig!

[ Voor 6% gewijzigd door lapismontes op 14-09-2011 21:51 ]


  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
lapismontes schreef op woensdag 14 september 2011 @ 21:47:
deze 'trucjes' vallen onder de window functions van sql, heel erg handig!
Mooie oplossing, maar MySQL kent dit soort functies niet.

Databases zoals PostgreSQL, SQL Server en Oracle hebben dit wel en dat scheelt veel werk.
Pagina: 1