我有一个表,其中列有:国家、年份、值、 我需要找到2015至2018年间和2019至2022年间其值之和大于1的国家. 我试着用亚库里不欠我的

select countries 
 FROM diamonds_export_long 
 WHERE year   between '2015' and '2018'
 GROUP BY countries , year
  having sum(value_millions) = 0

这给出了部分结果,然后我try 使用子查询不起作用

 SELECT countries
 FROM diamonds_export_long 
 GROUP BY countries ,year
  having  (year between '2015' and '2018' and  sum(value_millions) = 0)
    and (year between '2019' and '2021'and sum(value_millions) > 1) 

这看起来更正确,但没有效果 或许使用CASE的解决方案

推荐答案

你需要conditional aggregation美元.

下面是作为指导方针的untested个代码.

SELECT
  countries, 
  SUM(
    CASE WHEN year between 2015 
    and 2018 THEN value_millions ELSE 0 END
  ) as sum15_18, 
  SUM(
    CASE WHEN year between 2019 
    and 2022 THEN value_millions ELSE 0 END
  ) as sum19_22 
FROM 
  diamonds_export_long 
WHERE 
  (
    year between 2015 
    and 2018 
    OR year between 2019 
    and 2022
  ) -- optional 
GROUP BY 
  countries 
having 
  sum15_18 = 0 
  and sum19_22 > 1

Sql相关问答推荐

如何将varchar传递给tvf并使用该参数来查询结果SQL服务器

将有界时间周期作为阶跃函数,其中周期开始返回1,周期结束返回0

使用Mac日志(log)时间找出SQL中的好小时和坏小时

提高写密集型表的查询性能

Lag()函数的差异:R与SQL(将R代码转换为SQL)

如何计算一个用户S的日常连胜?

获得第三名或最老的记录

Select 列组(按同一表格中的另一列分组)Laravel 10

SQL递归.硬币兑换问题.-try 使用递归解决硬币找零问题

将SQL Server查询改进为;线程安全;

SQL OR子句如何在JOINON查询中工作?

将二维数组的第一个和第二个元素取消嵌套到两个一维数组中

除了风格之外,还有什么理由更喜欢简单的CASE WHEN而不是搜索呢?

如何根据共同列值从两个表中包含列,但只包含左表中的行

如何将输出转换为二维格式?

Postgresql 需要一个查询,为我提供所有没有具有特定状态值的子元素的父母

在 SQL 查询中创建滚动日期

Select 给定类别列表(或更多类别)中的所有事物

连接表时避免重复

创建一个将层次 struct 级别放入列中的查询