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.
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;