一条SQL语句,用于基于年份计算多列总数。

huangapple go评论82阅读模式
英文:

One SQL statement for multiple column totals based on year

问题

  1. SELECT
  2. COUNT(DISTINCT CASE WHEN Year = 2020 THEN Country END) AS "2020",
  3. COUNT(DISTINCT CASE WHEN Year = 2021 THEN Country END) AS "2021",
  4. COUNT(DISTINCT Country) AS Total_Unique_Countries
  5. FROM MYTABLE
英文:

I'm trying to return the total number of unique countries listed for each year, and the total number of unique countries in the entire table. The table is formatted like this:

  1. Country | Year | State | V1 | V2 |
  2. US 2020 NY 9 2
  3. US 2020 MA 3 6
  4. CA 2020 MAN 2 8
  5. CA 2020 ONT 5 1
  6. AU 2020 TAS 7 2
  7. AU 2020 VIC 3 3
  8. US 2021 NY 2 0
  9. US 2021 MA 8 2
  10. AU 2021 TAS 4 1
  11. AU 2021 VIC 5 2

I want my query to return this:

  1. 2020 | 2021 | Total_Unique_Countries
  2. 3 2 3

I tried:

  1. SELECT
  2. SUM(CASE WHEN YEAR=2020 THEN 1 ELSE 0 END) AS "2020",
  3. SUM(CASE WHEN YEAR=2021 THEN 1 ELSE 0 END) AS "2021",
  4. COUNT(DISTINCT COUNTRY) AS Total_Unique_Countries
  5. FROM MYTABLE GROUP BY YEAR

The result:

  1. 2020 | 2021 | Total_Unique_Countries
  2. 6 0 3
  3. 0 4 2

答案1

得分: 0

  1. 在一个公用表达式(CTE)中,您可以首先消除重复项,然后进行计数。
  2. WITH CTE as (SELECT DISTINCT "Country", "Year" FROM MYTABLE)
  3. SELECT
  4. SUM(CASE WHEN "Year"=2020 THEN 1 ELSE 0 END) AS "2020",
  5. SUM(CASE WHEN "Year"=2021 THEN 1 ELSE 0 END) AS "2021",
  6. COUNT(DISTINCT "Country") AS Total_Unique_Countries
  7. FROM CTE
2020 2021 total_unique_countries
3 2 3
  1. 这是代码部分的翻译,您可以在执行该代码时得到相应的结果。
  2. <details>
  3. <summary>英文:</summary>
  4. You can first elimnate the duplicates in a CTE and then count

WITH CTE as (SELECT
DISTINCT "Country", "Year" FROM MYTABLE)
SELECT
SUM(CASE WHEN "Year"=2020 THEN 1 ELSE 0 END) AS "2020",
SUM(CASE WHEN "Year"=2021 THEN 1 ELSE 0 END) AS "2021",
COUNT(DISTINCT "Country") AS Total_Unique_Countries
FROM CTE

  1. | 2020 | 2021 | total\_unique\_countries |
  2. |-----:|-----:|-----------------------:|
  3. | 3 | 2 | 3 |
  4. &gt; ``` status
  5. &gt; SELECT 1
  6. &gt; ```
  7. [fiddle](https://dbfiddle.uk/1QrVzLYE)
  8. </details>
  9. # 答案2
  10. **得分**: 0
  11. SELECT
  12. COUNT(DISTINCT CASE WHEN YEAR=2020 THEN COUNTRY END) AS "2020",
  13. COUNT(DISTINCT CASE WHEN YEAR=2021 THEN COUNTRY END) AS "2021",
  14. COUNT(DISTINCT COUNTRY) AS Total_Unique_Countries
  15. FROM MYTABLE
  16. 这应该给您所需的结果。
  17. <details>
  18. <summary>英文:</summary>
  19. SELECT
  20. COUNT(DISTINCT CASE WHEN YEAR=2020 THEN COUNTRY END) AS &quot;2020&quot;,
  21. COUNT(DISTINCT CASE WHEN YEAR=2021 THEN COUNTRY END) AS &quot;2021&quot;,
  22. COUNT(DISTINCT COUNTRY) AS Total_Unique_Countries
  23. FROM MYTABLE
  24. This should give you the result you are looking for.
  25. </details>

huangapple
  • 本文由 发表于 2023年2月16日 02:51:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/75464248.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定