2015-06-19 6 views
5

Moje pytanie brzmi:Sqlzoo SELECT wewnątrz SELECT Tutorial # 5

Niemcy (80 mln ludności) ma największą populację krajów w Europie. Austria (8,5 miliona mieszkańców) ma 11% populacji Niemiec.

Pokaż nazwę i populację każdego kraju w Europie. Pokaż populację jako procent populacji Niemiec.

Moja odpowiedź:

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

Co robię źle? Dzięki.

+0

dlatego, że podzapytanie? – DonCallisto

Odpowiedz

5

pytanie było niekompletne i została podjęta z here

to jest odpowiedź

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') 

Zastanawiam się nad pod-zapytaniem z punktu widzenia OP, które nie było jasne (przynajmniej dla mnie). Powodem jest to, że stół "światowy" (jak sama nazwa wskazuje, muszę przyznać) zawiera cały świat, podczas gdy interesuje nas tylko europejski. Co więcej, ludność Niemiec musi zostać odzyskana z DB, ponieważ nie jest to jeszcze 80.000.000; jeśli użyjesz tego numeru, otrzymasz z powrotem 101% jako populacja Niemiec.

+1

Ostatnia część SQL, GDZIE populacja ... jest zbędny. Możesz użyć WHERE continent = "Europe" zamiast tego blob. –

0

sub kwerendy należy zwracać wiele danych, dzięki czemu można korzystać z funkcji takich jak ten

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

Nie działa:/ – user3027665

+1

co to jest błąd ??? –

+0

To: 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

Dzięki za odpowiedź! Tylko kod odpowiedzi [są odradzane] (http: //meta.stackexchange.com/a/148274) na przepełnieniu stosu, ponieważ zrzut kodu bez kontekstu nie wyjaśnia, jak i dlaczego to rozwiązanie będzie działać, uniemożliwiając oryginalnemu plakatowi (lub przyszłym czytelnikom) zrozumienie logiki stojącej za nim. Zmodyfikuj swoje pytanie i dołącz objaśnienie kodu, aby inni mogli skorzystać z Twojej odpowiedzi! – AHiggins

2

Podczas używania serwera sql w zoo SQL, a następnie nie używać CONCAT:

myślę Zoo SQL wykorzystuje wersję SQL Server, który nie obsługuje CONCAT a ponadto wygląda jak trzeba zrób CAST. Zamiast tego połącz ze sobą znak "+". Zobacz także this post.

Myślę, że scenariusz powinien wyglądać jak poniżej (chociaż nie mam tego do życzenia, ponieważ chcę uzyskać wygląd 3%, 0%, 4%, itd. Zamiast 3.000000000000000%, 0.000000000000000%; 4.000000000000000%; itd. I zaczynam nowy temat dla tego 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'