presto查询未获得正确的值

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

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

I have written the below query:
SELECT min(s6) AS Mins6,
max(s6) AS Maxs6,
partition_0,
partition_1
FROM wqmram
WHERE cast(s6 AS decimal(30,2)) != 0.00
GROUP BY partition_0,partition_1
ORDER BY partition_0,partition_1;

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

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

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

c2e8gylq

c2e8gylq1#

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

select 
    partition_0,
    partition_1
    min(s6) as mins6,
    max(s6) as maxs6
from (
    select partition_0, partition_1, cast(s6 as decimal(30,2)) s6 
    from wqmram
) t
where s6 != 0.00
group by partition_0,partition_1
order by partition_0,partition_1;

相关问题