Query3 fix + query11/12

This commit is contained in:
Brieuc Dubois 2024-04-28 22:27:16 +02:00
parent 14dc4fe673
commit 0aa20f7f10
3 changed files with 57 additions and 35 deletions

21
P3/queries/query11.sql Normal file
View File

@ -0,0 +1,21 @@
DROP TABLE IF EXISTS ProductZeroPurchasesByProvince;
CREATE TABLE ProductZeroPurchasesByProvince AS
SELECT
c.name AS CountryName,
pro.name AS ProvinceName,
COUNT(pro.name) AS cnt
FROM
Purchases pur
JOIN
Province pro ON pur.product = 0 AND pur.province = pro.rowid
JOIN
Country c ON pro.country = c.code
GROUP BY
c.code, pro.name;
DROP INDEX IF EXISTS Province_index;
CREATE INDEX Province_index ON Province(name,country)
DROP INDEX IF EXISTS Country_index;
CREATE INDEX Country_index ON Country(code)

18
P3/queries/query12.sql Normal file
View File

@ -0,0 +1,18 @@
DROP TABLE IF EXISTS ProductZeroPurchasesByProvince;
CREATE TABLE ProductZeroPurchasesByProvince AS
SELECT
c.name AS CountryName,
pro.name AS ProvinceName,
COUNT(pro.name) AS cnt
FROM
Purchases pur
JOIN
Province pro ON pur.product = 0 AND pur.province = pro.rowid
JOIN
Country c ON pro.country = c.code
GROUP BY
c.code, pro.name;
DROP INDEX IF EXISTS Time_index;
CREATE INDEX Time_index ON Purchases(time,province,product,qty);

View File

@ -4,39 +4,22 @@
-- How do you treat the default case as showed in the instructions? -- How do you treat the default case as showed in the instructions?
-- How do you treat the case where several provinces of a same country have the same total number of purchases of product 0? You should show all such provinces. -- How do you treat the case where several provinces of a same country have the same total number of purchases of product 0? You should show all such provinces.
SELECT
SELECT name AS country, province, abs, prop ProductZeroPurchasesByProvince.CountryName AS country,
ProductZeroPurchasesByProvince.ProvinceName AS province,
MaxCount AS maximum,
CAST(MaxCount AS FLOAT) / TotalCount AS proportion
FROM ( FROM (
SELECT name AS province, country, max(cnt) as abs, max(cnt)*1.0/sum(cnt) AS prop SELECT
FROM( CountryName AS CountryMax,
SELECT province, sum(qty) as cnt MAX(cnt) AS MaxCount,
FROM Purchases SUM(cnt) AS TotalCount
WHERE product = 0
GROUP BY province
)
JOIN Province ON province = Province.ROWID
GROUP BY country
)
JOIN Country ON country = code
;
-- V2
SELECT country.name, TMP.province, cnt AS abs, cnt*1.0/scnt AS prop
FROM FROM
( ProductZeroPurchasesByProvince
SELECT province.country AS code, province.name AS province, COUNT(Purchases.qty) AS cnt GROUP BY
FROM province CountryName
LEFT JOIN Purchases ON Purchases.product = 0 AND Purchases.province = province.ROWID ) AS AggregatedData
GROUP BY province.name JOIN
) AS TMP ProductZeroPurchasesByProvince ON AggregatedData.CountryMax = ProductZeroPurchasesByProvince.CountryName
JOIN ( WHERE
SELECT code, province, MAX(cnt) AS mcnt, SUM(cnt) AS scnt FROM ( AggregatedData.MaxCount = ProductZeroPurchasesByProvince.cnt;
SELECT province.country AS code, province.name AS province, COUNT(Purchases.qty) AS cnt
FROM province
LEFT JOIN Purchases ON Purchases.product = 0 AND Purchases.province = province.ROWID
GROUP BY province.name
)
GROUP BY code
) AS F ON TMP.code = F.code AND TMP.cnt = F.mcnt
JOIN country ON country.code = TMP.code
;