presto查询未获得正确的值

yjghlzjz  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(568)

请你帮忙。
我有一个表名wqmram,我想按月计算列名s6的最小值和最大值。最小值不应该是零,因为我希望最小值大于零。

  1. I have written the below query:
  2. SELECT min(s6) AS Mins6,
  3. max(s6) AS Maxs6,
  4. partition_0,
  5. partition_1
  6. FROM wqmram
  7. WHERE cast(s6 AS decimal(30,2)) != 0.00
  8. GROUP BY partition_0,partition_1
  9. ORDER BY partition_0,partition_1;

分区\u 0是年,分区\u 1是月。我得到的结果如下,这是错误的:

  1. Mins6 Maxs6 partition_0 partition_1
  2. 1 1017 996 2019 11
  3. 2 1002 994 2019 12
  4. 3 00.09 958 2020 01
  5. 4 00.01 997 2020 02
  6. 5 100 999 2020 03
  7. 6 100 999 2020 04
  8. 7 1 99 2020 05
  9. 8 1000 998 2020 06

如果您看到上面的结果,那么最小值将大于最大值,这也是错误的。
有人能告诉我是什么问题吗?

c2e8gylq

c2e8gylq1#

在计算字符串值之前,需要将字符串值转换为数字 min 以及 max ,否则按字符串进行比较;一般来说, '996' 大于 '1017' ,因为前者以 '9' 后者以 '1' .
在子查询中转换可能比重复 cast() 外部查询中的表达式:

  1. select
  2. partition_0,
  3. partition_1
  4. min(s6) as mins6,
  5. max(s6) as maxs6
  6. from (
  7. select partition_0, partition_1, cast(s6 as decimal(30,2)) s6
  8. from wqmram
  9. ) t
  10. where s6 != 0.00
  11. group by partition_0,partition_1
  12. order by partition_0,partition_1;

相关问题