2015-06-19 13 views
5

Câu hỏi của tôi là:Sqlzoo CHỌN trong CHỌN Tutorial # 5

Đức (dân số 80 triệu) có dân số lớn nhất của nước ở châu Âu. Áo (dân số 8,5 triệu người) chiếm 11% dân số của Đức.

Hiển thị tên và dân số của mỗi quốc gia ở châu Âu. Hiển thị dân số dưới dạng phần trăm dân số của Đức.

câu trả lời của tôi:

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

Những gì tôi đang làm sai? Cảm ơn.

+0

tại sao subquery đó? – DonCallisto

Trả lời

5

Các là không đầy đủ và được lấy từ here

Đây là câu trả lời

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

Tôi đã tự hỏi về truy vấn phụ như từ câu hỏi của OP nó không rõ ràng (ít nhất là với tôi). Lý do là bảng "thế giới" (như tên đề nghị, tôi phải thừa nhận) chứa tất cả các nước trên thế giới trong khi chúng tôi chỉ quan tâm đến một châu Âu. Hơn nữa, dân số của Đức phải được lấy từ DB bởi vì nó không phải là 80.000.000 phi thường; nếu bạn sử dụng số đó bạn nhận lại 101% là dân số Đức.

+1

Phần cuối cùng của SQL, WHERE ... là thừa. Bạn chỉ có thể sử dụng WHERE continent = "Europe" thay vì blob đó. –

0

phụ truy vấn nên được trả về nhiều dữ liệu, do đó bạn có thể sử dụng chức năng giống như câu hỏi này

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

Nó không hoạt động:/ – user3027665

+1

lỗi là gì ??? –

+0

Điều này: 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

Cảm ơn bạn đã trả lời! Các câu trả lời chỉ có mã [được khuyến khích] (http: //meta.stackexchange.com/a/148274) trên Stack Overflow, bởi vì một bãi chứa mã không có ngữ cảnh không giải thích cách thức hoặc tại sao giải pháp sẽ hoạt động, làm cho nó không thể cho poster gốc (hoặc bất kỳ độc giả nào trong tương lai) hiểu logic đằng sau nó. Vui lòng chỉnh sửa câu hỏi của bạn và đưa ra giải thích về mã của bạn để người khác có thể hưởng lợi từ câu trả lời của bạn! – AHiggins

2

Khi sử dụng máy chủ sql trong Zoo SQL, sau đó không sử dụng CONCAT:

Tôi nghĩ Zoo SQL sử dụng một phiên bản của SQL Server mà không hỗ trợ CONCAT và hơn nữa có vẻ như bạn phải làm một số CAST. Thay vào đó, hãy kết hợp với việc sử dụng '+'. Xem thêm this post.

Tôi tìm kịch bản phải giống như bên dưới (mặc dù tôi chưa hiểu nó theo mong muốn của mình, vì thực tế tôi muốn kết quả trông giống như 3%; 0%; 4%; v.v. thay vì 3.000000000000000%; 0.000000000000000%; 4.000000000000000%; v.v. Và tôi bắt đầu một chủ đề mới cho một số 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' 
Các vấn đề liên quan