sql >> Database >  >> RDS >> Database

Hoe te bestellen op telling in SQL?

Probleem:

U heeft gegevens samengevoegd in groepen, maar u wilt de records in aflopende volgorde sorteren op het aantal elementen in de groepen.

Voorbeeld:

Onze database heeft een tabel met de naam user met gegevens in de volgende kolommen:id , first_name , last_name , en country .

id voornaam achternaam land
1 Lisa Willems Engeland
2 Gary Anders Polen
3 Tom Willems Polen
4 Michael Bruin Frankrijk
5 Susan Smith VS
6 Anna Jones VS
7 Ellie Miller Polen

Laten we een rapport maken over onze gebruikers. We groeperen de resultaten op country en tel het aantal gebruikers van elk land. Maar we sorteren de groepen ook in aflopende volgorde op het aantal gebruikers. Op die manier verschijnen de landen met het grootste aantal gebruikers bovenaan.

Oplossing:

SELECT country,
 COUNT(id) 
FROM user
GROUP BY  country
ORDER BY COUNT(id) DESC ;
land count(id)
Polen 3
VS 2
Engeland 1
Frankrijk 1

Discussie:

Om de geselecteerde records te sorteren op het aantal elementen in elke groep, gebruikt u de ORDER BY clausule.

De eerste stap is het gebruik van de GROUP BY clausule om de groepen te maken (in ons voorbeeld groeperen we op country kolom). Vervolgens gebruikt u in de ORDER BY-component de aggregatiefunctie COUNT, die het aantal waarden in de kolom van uw keuze telt; in ons voorbeeld tellen we verschillende ID's met COUNT(id) . Dit telt effectief het aantal elementen in elke groep. De ORDER BY clausule sorteert dan de groepen volgens die berekening.

Zoals gewoonlijk kunt u zowel oplopende als aflopende volgorde gebruiken met ORDER BY . Als je een aflopende volgorde wilt (zoals in dit voorbeeld), gebruik je de DESC trefwoord. Oplopende volgorde heeft geen trefwoord nodig omdat dit de standaard is, maar u kunt de ASC gebruiken trefwoord als u expliciet wilt zijn. Dit is hetzelfde voorbeeld maar met resultaten gesorteerd in oplopende volgorde:

Oplossing:

SELECT country,
 COUNT(id) 
FROM user
GROUP BY  country
ORDER BY COUNT(id);

Dit is het resultaat:

land count(id)
Engeland 1
Frankrijk 1
VS 2
Polen 3

  1. Een andere PL/SQL-procedure aanroepen binnen een procedure

  2. SQL Server-fout 206:clash van operandtype

  3. MySQL varchar-indexlengte

  4. Hoe een array van Java terug te sturen naar PL/SQL?