2015-05-12 4 views
5

Die problem statement ist:Was ist die Lösung für den 13. Teil von 'select from world' Tutorial auf sqlzoo?

Setzen Sie die Kontinente rechts ...

  • Ozeanien wird Austral
  • Länder in Eurasien und gehen die Türkei nach Europa/Asien
  • karibischen Inseln beginnend mit ‚B 'gehen nach Nordamerika, andere karibische Inseln gehen nach Südamerika

Zeigen Sie den Namen, den ursprünglichen Kontinent und den neuen Kontinent von allen Ländern.

Meine Lösung:

SELECT name, continent, 
    CASE WHEN continent='Oceania' THEN 'Australasia' 
     WHEN continent IN ('Europe', 'Asia') THEN 'Europe/Asia' 
     WHEN name='Turkey' THEN 'Europe/Asia' 
     WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America' 
     WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America' 
     ELSE continent END 
FROM world 

Das Ergebnis, das ich von sqlzoo bekommen ist "Falsche Antwort Einige der Daten sind falsch..".

+1

Die Frage sagt 'Eurasia', Ihre Antwort sagt' IN ('Europa', 'Asien') '. Ich persönlich glaube nicht, dass die Türkei Länder enthält. – Jodrell

+1

Ich stimme @jodrell zu (versuchen, vorherzusagen, was sqlzoo als richtige Antwort erwartet ...) Die gute Nachricht ist, dass Ihr SQL 100% solide ist und das Problem mit den Strings besteht, die Sie dort stecken, die sqlzoo nicht tut mögen. – JNevill

+0

@Jodrell, habe ich das jetzt versucht, aber es funktioniert auch nicht.Die ursprüngliche Tabelle soll in der Kontinentspalte nicht "Eurasien" enthalten. – systemovich

Antwort

10

Das funktioniert für mich. Fragen Sie mich nicht, warum ich das ORDER BY verwenden muss (ohne das es nicht funktioniert hat).

SELECT name, continent, 
    CASE WHEN continent='Oceania' THEN 'Australasia' 
     WHEN continent = 'Eurasia' THEN 'Europe/Asia' 
     WHEN name='Turkey' THEN 'Europe/Asia' 
     WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America' 
     WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America' 
     ELSE continent END 
FROM world ORDER BY name 
+0

Ja, es sieht so aus, als ob der Datensatz 'Eurasien' enthält, also ist das korrekt. Ich glaube nicht, dass das ORDER BY notwendig ist, da dies das Problem "Eurasia" in den OP-Antworten korrigiert. – JNevill

+3

Das 'ORDER BY' ist notwendig, um die Seite funktionieren zu lassen, nicht um diese Interpretation der Frage zu beantworten. – Jodrell

3

Sieht ein Fehler in ihrem System zu sein, wenn ich die Frage falsch bin Lesen:

SELECT name, continent, 
CASE WHEN continent='Oceania' THEN 'Australasia' 
     WHEN continent IN ('Eurasia') THEN 'Europe/Asia' 
     WHEN name='Turkey' THEN 'Europe/Asia' 
     WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America' 
     WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America' 
     ELSE continent END 
FROM world 
order by name 

Wenn Sie in „order by name“ hinzufügen gibt es eine richtige Antwort mit der obigen Abfrage. Wenn Sie die Bestellung jedoch nicht einschließen, wird sie als falsch markiert. Warum ich nicht sicher bin.

2

Dies funktioniert auch. Verwendet, um eine OR-Anweisung für die Türkei und umbenannt neue Spalte

SELECT name,continent, 
CASE 
WHEN continent='Oceania' THEN 'Australasia' 
WHEN continent='Eurasia' OR name = 'Turkey' THEN 'Europe/Asia' 
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America' 
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America' 
ELSE continent 
END as 'new continent name' 
FROM world 
ORDER BY name 
1

Ich versuchte es, und mit 'OR' für die Türkei statt, um neue Erklärung wird sich nicht helfen. Stimmen Sie zu, dass dies nicht korrekt ist und wahrscheinlich ein Fehler der Seite sqlzoo ist.

Aber bei Verwendung mit 'ORDER BY name' sind beide Möglichkeiten richtig.

Und die Namen der Spalten sind nicht wichtig, Sie können sie als YouLikeItToBe 'benennen. So offensichtlich, sqlzoo überprüft, was in der Tabelle ist, zählen und die Reihenfolge davon, aber nicht die Reihenfolge.

2

Die Reihenfolge sollte nicht wichtig sein, aber die Antwort der Website (wenn Sie falsch antworten) schlägt vor, dass die Ausgabe nach Ländernamen sortiert werden soll.

SELECT name AS Country, continent as Continent, 
    CASE WHEN continent='Oceania' THEN 'Australasia' 
     WHEN continent IN ('Eurasia', 'Turkey') THEN 'Europe/Asia' 
     WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America' 
     WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America' 
     ELSE continent END AS "New Continent" 
FROM world 
ORDER BY Country; 
3

Der folgende Code Ihr Problem lösen soll:

SELECT name AS Country, continent as Continent, 
    CASE WHEN continent='Oceania' THEN 'Australasia' 
     WHEN continent = 'Eurasia' THEN 'Europe/Asia' 
WHEN name='Turkey' THEN 'Europe/Asia' 
     WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America' 
     WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America' 
     ELSE continent END AS "New Continent" 
FROM world 
WHERE tld IN ('.ag','.ba','.bb','.ca','.cn','.nz','.ru','.tr','.uk') 
ORDER BY Country; 
Verwandte Themen