我需要計算在特定日期范圍內每個縣銷售了多少種不同型別的水果,使用county_name和 distinct fruit_codes。
我有一張county桌子:
| 縣碼 | 縣名 |
|---|---|
| 1 | 科爾法克斯 |
| 2 | 卡特倫 |
| 3 | 哈丁 |
我有一張fruit桌子:
| 縣碼 | 水果代碼 | 日期 |
|---|---|---|
| 1 | 1 | 2020-01-01 |
| 1 | 2 | 2020-01-01 |
| 1 | 3 | 2020-01-01 |
| 1 | 4 | 2020-01-01 |
| 2 | 1 | 2020-01-01 |
| 2 | 2 | 2020-01-01 |
| 3 | 1 | 2020-01-01 |
| 3 | 2 | 2020-01-01 |
| 3 | 3 | 2020-01-01 |
| 1 | 1 | 2021-01-01 |
| 1 | 3 | 2021-01-01 |
| 2 | 2 | 2021-01-01 |
| 3 | 2 | 2021-01-01 |
| 3 | 3 | 2021-01-01 |
所以我的預期結果是:
| 縣名 | 水果代碼 |
|---|---|
| 科爾法克斯 | 4 |
| 卡特倫 | 2 |
| 哈丁 | 3 |
我嘗試了以下代碼,但fruit_code很遺憾,不同 s 的數量并不完全正確(注意:當然,實際表要長得多)。
WITH unique_fruits AS (
SELECT fruit_code FROM fruit
WHERE date BETWEEN '2020-01-01' AND '2021-01-01'
GROUP BY fruit_code HAVING COUNT(DISTINCT county_code) = 1
)
SELECT c.county_name, COUNT(*) AS no_of_unique_fruits
FROM fruit AS f
JOIN county AS c
ON f.county_code = c.county_code
AND f.fruit_code IN (SELECT fruit_code FROM unique_fruits)
GROUP BY c.county_name
ORDER BY no_of_unique_fruits DESC
我在這里忘記了什么?
uj5u.com熱心網友回復:
您需要LEFT加入countyto fruit(以便獲得0不符合條件的縣的結果)并按縣分組。
此外,關于日期的條件應放在ON子句中:
SELECT c.county_name,
COUNT(DISTINCT f.fruit_code) total
FROM county c LEFT JOIN fruit f
ON f.county_code = c.county_code AND date BETWEEN '2020-01-01' AND '2021-01-01'
GROUP BY c.county_code;
我假設這county_code是 的主鍵county。
請參閱演示。
uj5u.com熱心網友回復:
你可以更輕松地解決這個問題
WITH fruitcodespercountry AS( SELECT "county_code", COUNT(DISTINCT "fruit_code") fruit_code FROM Fruit WHERE "date" BETWEEN '2020-01-01' AND '2021-01-01' GROUP BY "county_code") SELECT "county_name" ,fruit_code FROM fruitcodespercountry f JOIN country c ON f."county_code" = c."county_code"縣名 | 水果代碼 :------------ | ---------: 科爾法克斯 | 4 卡特倫 | 2 哈丁 | 3
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463054.html
標籤:sql PostgreSQL
上一篇:行級安全性-更新行
