Thai Ngo
Thai Ngo
Thảo luận 1 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 36 lượt xem

PHẦN TRĂM PHÁT TRIỂN THEO TỪNG NĂM

Theo nội dung bài tập để tính % tăng trưởng GDP là lấy năm (2019 - 2018)/2018, nhưng em muốn lấy từng giá trị GDP của từng quốc gia CHIA CHO năm 2018 (hoặc 2019) thì em là như sau có được không:

Select Country, (gdp.[gdp2018($m)]/SUM(gdp.[gdp2018($m)])) as _growthgdp
From gdp

NHƯNG em thấy bị báo lỗi như sau:

Column 'gdp.Country' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

HOẶC

Select Country, (gdp.[gdp2018($m)]/SUM(gdp.[gdp2018($m)])) as _growthgdp
From gdp
group by country

NHƯNG em thấy bị báo lỗi như sau:

Column 'gdp.gdp2018($m)' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Giảng viên thông tin thêm giúp em ah. 

Em xin cảm ơn.

 

Thảo luận 1 câu trả lời
Lượt xem 36 lượt xem
Vỗ tay vỗ tay
Thai Ngo 16:05 - May 29, 2024

Dạ vâng Gitiho xin giải đáp thắc mắc của Anh/Chị là trong SQL, khi Anh/Chị sử dụng các hàm tổng hợp (aggregate functions) như SUM, tất cả các cột khác không nằm trong hàm tổng hợp phải được đưa vào câu lệnh`GROUP BY. Điều này là để đảm bảo rằng kết quả truy vấn có ý nghĩa rõ ràng và nhất quán.

Dưới đây là cách viết đúng để tính tỷ lệ GDP của mỗi quốc gia so với tổng GDP của tất cả các quốc gia trong năm 2018:
SELECT 
   Country, 
   (gdp.[gdp2018($m)] / SUM(gdp.[gdp2018($m)]) OVER ()) as _growthgdp
FROM 
   gdp;

 

Nếu Anh/Chị không muốn dùng hàm cửa sổ, Anh/Chị có thể viết lại câu truy vấn như sau:
WITH TotalGDP AS (
   SELECT SUM(gdp.[gdp2018($m)]) AS TotalGDP2018
   FROM gdp
)
SELECT 
   gdp.Country, 
   (gdp.[gdp2018($m)] / TotalGDP.TotalGDP2018) AS _growthgdp
FROM 
   gdp, TotalGDP;

Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông