2015-06-19 10 views
5

Meine Frage ist:Sqlzoo SELECT innerhalb SELECT Tutorial # 5

Deutschland (Bevölkerung 80 Millionen) hat die größte Bevölkerung der Länder in Europa. Österreich (Bevölkerung 8,5 Millionen) hat 11% der Bevölkerung von Deutschland.

Zeigen Sie den Namen und die Bevölkerung jedes Landes in Europa an. Zeigen Sie die Bevölkerung als Prozentsatz der Bevölkerung von Deutschland.

Meine Antwort:

SELECT name,CONCAT(ROUND(population/80000000,-2),'%') 
FROM world 
WHERE population = (SELECT population 
        FROM world 
         WHERE continent='Europe') 

Was mache ich falsch? Danke.

+0

warum die Unterabfrage? – DonCallisto

Antwort

5

Die Frage war unvollständig und wurde genommen von here

Dies ist die Antwort

SELECT 
    name, 
    CONCAT(ROUND((population*100)/(SELECT population 
           FROM world WHERE name='Germany'), 0), '%') 
FROM world 
WHERE population IN (SELECT population 
        FROM world 
        WHERE continent='Europe') 

verwenden können Ich habe mich über Unterabfrage gewundert, da die OP-Frage nicht klar war (zumindest für mich). Der Grund ist, dass "Welt" -Tisch (wie der Name vermuten lässt, ich muss zugeben) alle Länder der Welt enthält, während wir uns nur für europäische interessieren. Außerdem muss die Bevölkerung von Deutschland aus der DB geholt werden, da es nicht 80.000.000 ist; Wenn Sie diese Nummer verwenden, erhalten Sie 101% als deutsche Bevölkerung zurück.

+1

Der letzte Teil der SQL, WHERE Bevölkerung ... ist überflüssig. Sie können WHERE continent = "Europe" anstelle dieses Blobs verwenden. –

0

Sub-Abfrage sollte mehrere Daten zurück, so dass Sie in der Funktion wie diese

SELECT name,CONCAT(ROUND(population/80000000,-2),'%') 
    FROM world 
    WHERE population IN (SELECT population 
         FROM world 
          WHERE continent='Europe') 
+0

Es funktioniert nicht:/ – user3027665

+1

Was ist der Fehler ?? –

+0

Dies: http://oi58.tinypic.com/mlnxt.jpg – user3027665

1
select name, CONCAT(ROUND((population/(select population from world where name = "Germany"))*100),"%") 
    from world 
    where continent= "Europe" 
+0

Danke für die Antwort! Code-only-Antworten [werden davon abgeraten] (http: //meta.stackexchange.com/a/148274) auf Stack Overflow, da ein Code-Dump ohne Kontext nicht erklärt, wie oder warum die Lösung funktioniert, was es dem ursprünglichen Poster (oder zukünftigen Lesern) unmöglich macht, die Logik dahinter zu verstehen. Bitte bearbeiten Sie Ihre Frage und fügen Sie eine Erklärung Ihres Codes hinzu, damit andere von Ihrer Antwort profitieren können! – AHiggins

2

Wenn SQL Server in SQL Zoo arbeiten, verwenden Sie dann nicht CONCAT:

denke ich SQL Zoo eine Version von SQL Server verwendet, der nicht CONCAT unterstützt und darüber hinaus sieht es aus wie Sie müssen Machen Sie eine CAST. Stattdessen verketten Sie mit der Verwendung von '+'. Siehe auch this post.

Ich denke, das Skript sollte etwas wie unten sein (obwohl ich es nicht zu meinem Wunsch angegeben habe, aufgrund der Tatsache, dass ich wie 3%, 0%, 4%, etc 3.000000000000000%; 0,000000000000000%; 4.000000000000000%; etc .. Und ich beginne ein neues Thema für dieses here).

SELECT name, CAST(ROUND(population*100/(SELECT population FROM world WHERE name='Germany'), 0) as varchar(20)) +'%' FROM world WHERE population IN (SELECT population FROM world WHERE continent='Europe')

1
SELECT name, CONCAT(ROUND(population/(SELECT population FROM world WHERE name = 'Germany')*100,0), '%') 
FROM world 
WHERE continent = 'Europe'