Archief - Vraag over query

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Boddah

Legacy Member
Ik heb een query die bv het volgende resultaat geeft:

ID1 ID2
12921 40
11855 40
11228 40
10257 40
10433 40
13214 41
10261 42
6410 42
10263 42
10164 42
13236 42
6847 43
10379 43
10384 43
10669 43
10388 43
10391 43
9772 43

Dit zijn primary keys van 2 tabellen. Nu zou ik graag dit resultaat oplopend willen sorteren volgens het gegroepeerde totaal van ID2.

Met andere woorden, bovenstaand voorbeeld zou het volgende moeten worden:

ID1 ID2
6847 43
10379 43
10384 43
10669 43
10388 43
10391 43
9772 43
12921 40
11855 40
11228 40
10257 40
10433 40
10261 42
6410 42
10263 42
10164 42
13236 42
13214 41

ID2 met waarde 43 komt het meeste voor (7 keer), dus die rijen komen eerst. Dan ID2 met 40 (komt 5 keer voor), dan ID2 = 42 (ook 5 keer) en ten slotte ID2 = 41 (komt 1 keer voor).

Hoe maak ik deze selectie precies in een query?
Thanks!

Adelbert

Legacy Member
select id1.tabel1, id2.tabel2
from tabel1, tabel2
where bla1.tabel1 = bla2.tabel2
order by count(id2.tabel2)

iirc :)

Boddah

Legacy Member
Ja, dat dacht ik dus ook. Maar als ik dat doe krijg ik maar één resultaat terug, nl:

12921 40

Dus de eerste rij uit de reeks.

Ik zal voor de gemakkelijkheid m'n volledige query tonen, misschien ligt het aan een slechte join of zo.

SELECT teams.id, divisions.id
FROM teams
JOIN users ON users.id = teams.user_id
JOIN divisions_teams ON divisions_teams.team_id = teams.id
JOIN divisions ON divisions.id = divisions_teams.division_id
WHERE users.status = 0
AND divisions.level_number = 4
AND divisions.country = 'Belgium'

Als ik deze query dan uitbreid met ORDER BY count(divisions.id), kreeg ik maar 1 rij terug.

Cycloon

Legacy Member
Die count houdt helemaal geen rekening of die id's hetzelfde zijn of niet (als ik me niet vergis zal die zelf gewoon elke keer 1 teruggeven). Met die count in de order by ga je het dus zeker nooit halen. In oracle zou dit snel opgelost zijn met een count() over() maar om dit in mysql te doen zou ik ook ff moeten denken omdat die volgens mij geen over() ondersteunt :)

Je zou natuurlijk wel makkelijk een subquery kunnen plaatsen als 3de veld waarbij je het aantal uitrekent en dan sorteren op de 3de kolom.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan