首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >红移除法结果不包含小数

红移除法结果不包含小数
EN

Stack Overflow用户
提问于 2018-05-24 01:47:04
回答 2查看 23.1K关注 0票数 20

我正在尝试做一些非常基础的事情,来计算Redshift中两列之间的百分比。然而,当我用一个例子运行查询时,结果就是零,因为小数点没有被覆盖。

代码:

代码语言:javascript
复制
select 1701 / 84936;

输出:

我试过了:

代码语言:javascript
复制
select cast(1701 / 84936 as numeric (10,10));

但结果是0.0000000000

我怎么才能解决这个愚蠢的问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-24 01:48:04

它是整数除法。确保至少有一个参数是:NUMERIC(精确数据类型)/FLOAT(注意:它是近似数据类型):

/除法(整数除法截断结果)

代码语言:javascript
复制
select 1701.0 / 84936;
-- or
SELECT 1.0 * 1701 / 84936;
-- or
SELECT CAST(1701 AS NUMERIC(10,4))/84936;
票数 28
EN

Stack Overflow用户

发布于 2019-07-13 00:12:31

混合数据类型时,顺序会起作用

请注意,数学表达式中元素的顺序计入结果的数据类型。

让我们假设我们打算计算列(或数字)都是整数的百分比unit_sales/total_sales

请参阅并尝试使用此代码here

代码语言:javascript
复制
-- Some dummy table
drop table if exists sales;
create table sales as 
    select 3 as unit_sales, 9 as total_sales;

-- The calculations
select
    unit_sales/total_sales*100,   --> 0 (integer)
    unit_sales/total_sales*100.0, --> 0.0 (float)
    100.0*unit_sales/total_sales  --> 33.3 (float and expected result)
from sales;

输出

代码语言:javascript
复制
  0 | 0.0 | 33.33

  1. 第一列是0(整数),因为在整数除法中3/9=0。
  2. 第二列是0.0,因为SQL首先得到了整数0 (3/9),然后SQL将它转换为浮点数,以便执行100.0的乘法。
  3. 得到了预期的结果。

表达式开头的非整数100.0强制非整数calculation.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50494508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档