web-dev-qa-db-ja.com

Redshift除算結果に小数は含まれません

Redshiftの2つの列の間の一種のパーセンテージを計算するために、本当に基本的なことを実行しようとしています。ただし、例を使用してクエリを実行すると、小数がカバーされていないため、結果は単にゼロになります。

コード:

select 1701 / 84936;

出力:

enter image description here

私は試した :

select cast(1701 / 84936 as numeric (10,10));

しかし、結果は0.0000000000

どうすればこのばかげたことを解決できますか?

11

整数除算です。少なくとも1つの引数が:NUMERIC(正確なデータ型)/ FLOAT(注意:およそのデータ型)であることを確認してください:

/除算(整数除算は結果を切り捨てます)

select 1701.0 / 84936;
-- or
SELECT 1.0 * 1701 / 84936;
-- or
SELECT CAST(1701 AS NUMERIC(10,4))/84936;

DBFiddle Demo

11
Lukasz Szozda

タイプを混合する場合、順序は重要です

また、数式の数値の順序が重要であることにも注意してください。
パーセンテージを計算するつもりだとしましょうunit_sales/total_salesここで、両方の列(または数値)は整数です。

コード( http://tpcg.io/RMzCvL

-- 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,
    unit_sales/total_sales*100.0,
    100.0*unit_sales/total_sales
from sales;

出力

  0 | 0.0 | 33.33
  1. 整数の除算では3/9 = 0であるため、最初の列は0(整数)です。
  2. 最初に整数0を取得したため、2番目の列は0.0です。後でそれを非整数に変換します。
  3. 期待される結果。非整数100.0は、非整数計算を強制します。
0
ePi272314