2015-05-12 31 views
5

Il problem statement è:Qual è la soluzione alla tredicesima parte del tutorial 'select from world' su sqlzoo?

Mettere i continenti giuste ...

  • Oceania diventa Australasia
  • Paesi in Eurasia e Turchia andare in Europa/Asia
  • isole dei Caraibi che iniziano con 'B 'andare in Nord America, altre isole dei Caraibi andare in Sud America

Mostra il nome, il continente originale e il nuovo continente di tutti i paesi .

La mia soluzione:

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 

Il risultato mi da sqlzoo è "Risposta sbagliata Alcuni dei dati non è corretto."..

+1

La domanda dice: 'Eurasia', la risposta dice' IN ('Europa', 'Asia') '. Personalmente, non pensavo che la Turchia contenesse alcun paese. – Jodrell

+1

Sono d'accordo con @jodrell (cercando di prevedere quale sqlzoo anticipa come risposta corretta ...) La buona notizia è che il tuo SQL è solido al 100% e il problema è con le stringhe che hai bloccato lì che sqlzoo non ha piace. – JNevill

+0

@Jodrell, l'ho provato ora, ma non funziona.La tabella originale non dovrebbe contenere "Eurasia" nella colonna del continente. – systemovich

risposta

10

Questo funziona per me. Non chiedermi perché devo usare l'ORDINE DA (non ha funzionato senza di esso).

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

Sì, sembra che il set di dati contenga "Eurasia", quindi è corretto. Non credo che l'ORDINE DI sia necessario poiché questo corregge il problema dell '"Eurasia" nella risposta ai PO. – JNevill

+3

Il 'ORDER BY' è necessario per far funzionare il sito, non per rispondere a questa interpretazione della domanda. – Jodrell

3

sembra essere un bug nel loro sistema a meno che non sto leggendo il torto domanda:

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 

Se si aggiunge in "ordine per nome" dà una risposta corretta con la query di cui sopra. Tuttavia, se non si include l'ordine contrassegnandolo come errato. Per quanto riguarda il motivo per cui non sono sicuro.

2

Funziona anche. Usato un'istruzione OR per la Turchia e rinominato nuova colonna

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

ho provato, e l'utilizzo di 'OR' per la Turchia invece di rendere nuova dichiarazione non aiuterà se stesso. D'accordo che questo non è corretto ed è probabilmente un errore della pagina sqlzoo.

Ma se utilizzato con 'ORDER BY name' entrambi i modi sono corretti.

E i nomi delle colonne non sono importanti, puoi chiamarli 'come YouLikeItToBe'. Quindi, ovviamente, sqlzoo controlla ciò che è nella tabella, conta e anche l'ordine di esso, tuttavia, non mantiene l'ordine.

2

L'ordine non dovrebbe avere importanza, ma la risposta del sito Web (quando si risponde in modo errato) suggerisce che l'output debba essere ordinato in base al nome del paese.

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

Il seguente codice dovrebbe risolvere il problema:

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;