2017-02-26 1 views
0

Ich versuche, eine Liste über die am häufigsten verwendeten Sprachen in der Welt, aus der Welt Tabelle, indem Sie feststellen, wie viele Leute sie sprechen.Sortieren von Spalten von am häufigsten zu am wenigsten häufig, ignorieren Duplikate

Bisher habe ich:

SELECT DISTINCT language, TRUNCATE((country.population * countrylanguage.percentage/100), 0) AS People 
FROM countrylanguage, country 
WHERE code = countrycode 
ORDER BY People DESC 

Und es gibt mir fast, was ich will, aber die Sprachen werden nicht richtig addieren, zum Beispiel Englisch mehrere Male für jedes Mal, zeigt sich es als Sprache erwähnt wird . Ich weiß, dass ich irgendwo falsch liege, ich kann einfach nicht herausfinden, wo.

enter image description here

Edit: Saw Bild war auf Norwegisch. Linke Spalte ist Sprache, rechts ist die Anzahl der Personen, die sie sprechen.

+0

Können Sie uns Beispieltabellendaten zeigen? –

Antwort

2

Sie beabsichtigen wahrscheinlich, hier eine Art Aggregation durchzuführen. Ich würde vermuten, dass Sie sollten die Anzahl der Lautsprecher über jede Sprache werden aggregiert und dann berichten dies:

SELECT t1.language, 
     TRUNCATE(SUM(t2.population * t1.percentage/100), 0) AS people 
FROM countrylanguage t1 
INNER JOIN country t2 
    ON t1.countrycode = t2.code 
GROUP BY t1.language 
ORDER BY people DESC 

Beachten Sie, dass ich Ihre implizite Join mit einer expliziten ersetzt haben, die INNER JOIN zusammen mit einer ON Klausel verwendet. Es wird von den meisten als wünschenswert erachtet, auf diese Weise eine Abfrage mit Joins zu schreiben, da es dadurch leichter zu erkennen ist, was passiert.

+0

Ich werde dies für zukünftige Referenz mit Joins berücksichtigen. Außerdem schien SUMME das zu sein, was ich vermisste. Ich kann nicht glauben, dass mir das entfallen ist. Vielen Dank, dass Sie sich die Zeit genommen haben zu helfen. – PQuix

0

Sie wollen eine JOIN und Aggregation mit einer Aggregationsfunktion:

SELECT cl.language, 
     TRUNCATE(SUM(c.population * cl.percentage)/100), 0) AS People 
FROM countrylanguage cl JOIN 
    country c 
    ON c.code = cl.countrycode 
GROUP BY cl.language 
ORDER BY People DESC; 

Die Verwendung von TRUNCATE() für diesen Zweck merkwürdig erscheint. Sie möchten People als Ganzzahl zurückgeben. Die typische Funktion ist FLOOR():

SELECT cl.language, 
     FLOOR(SUM(c.population * cl.percentage)/100) AS People 
FROM countrylanguage cl JOIN 
    country c 
    ON c.code = cl.countrycode 
GROUP BY cl.language 
ORDER BY People DESC; 
+0

@TimBiegeleisen. . . Ich muss angefangen haben, bevor du gepostet hast. –

+0

@TimBiegeleisen. . . Um ehrlich zu sein, begann der Post mit einer Hetzrede über die Verwendung von 'select distinct' mit' sum() '. . . dann wurde mir klar, dass das OP nicht 'sum()' in 'select' hatte, das ist das Problem. Normalerweise antworte ich schneller;) –

Verwandte Themen