0

J'ai une table comme image jointe dans la base de données SQLITE.Récupérer des données triées en fonction d'une colonne numérique dans SQLITE

Sqlite table

Je suis en train de récupérer des données sur la colonne triées en fonction SOMME (fret). Pour cela, j'ai utilisé la requête ci-dessous.

SELECT ShipCountry DE CountryDetails GROUP BY ShipCountry ORDER BY SUM (fret) ASC
Quand je cours ce que je reçois comme résultat ci-dessous.

Sqlite result

Si je lance la requête ci-dessous je reçois comme résultat ci-dessous. C'est bien.

SELECT ShipCountry, ShipCity DE CountryDetails GROUP BY ShipCountry, ShipCity ORDER BY SUM (fret), ShipCity ASC

Result

Au lieu de cela, je besoin d'un résultat comme celui ci-dessous. Dans l'ordre par la clause SUM (fret) devrait considérer seulement ShipCountry. Il ne doit pas prendre en compte à la fois ShipCountry et ShipCity. Mon résultat attendu est

Tableau result

Comment parvenir à ce résultat par requête SQLite? En SQL, nous pouvons atteindre comme ci-dessous la requête

Sélectionnez ShipCountry, ShipCity du groupe Countrydetails par ShipCountry, ShipCity Commande par SUM (SUM (fret)) over (partition par ShipCountry), Shipcity Asc.

Nous avons besoin d'une requête équivalente comme celle-ci dans Sqlite.

+0

Seattle en Pologne? –

Répondre

2

Utilisez un sous-requête pour trouver la somme frieght pour chaque pays, puis commande en utilisant uniquement cette somme au niveau des pays:

SELECT 
    cd1.ShipCountry, 
    cd1.ShipCity 
FROM Countrydetails cd1 
INNER JOIN 
(
    SELECT ShipCountry, SUM(freight) AS freight_sum 
    FROM Countrydetails 
    GROUP BY ShipCountry 
) cd2 
    ON cd1.ShipCountry = cd2.ShipCountry 
ORDER BY 
    cd1.freight_sum, 
    cd1.ShipCountry, -- needed in case two countries happen to have the same sum 
    cd1.ShipCity 

Nous pourrions ajouter un autre niveau de tri pour la frieght de chaque ville, à l'ordre dans un donné pays. Mais votre résultat attendu n'implique pas que vous le vouliez.

+0

Merci. après avoir fait un changement mineur dans la clause Order by, cela fonctionne très bien. COMMANDER Par cd2.freight_sum cd1.ShipCountry cd1.ShipCity –