sql - 在 Amazon Redshift 中存储极小的值

标签 sql amazon-redshift

我正在Amazon Redshift中创建一个表使用以下命令:

CREATE TABLE asmt.incorrect_question_pairs_unique 
AS
SELECT question1,
       question2,
       occurrences,
       occurrences / (SUM(occurrences)::FLOAT) OVER () AS prob_q1_q2
FROM (SELECT question1,
             question2,
             SUM(occurrences) AS occurrences
      FROM asmt.incorrect_question_pairs
      GROUP BY question1,
               question2
      HAVING SUM(occurrences) >= 50)

我也尝试了一个替代方案:
CREATE TABLE asmt.incorrect_question_pairs_unique 
    AS
    SELECT question1,
           question2,
           occurrences,
           occurrences::float / SUM(occurrences) OVER () AS prob_q1_q2
    FROM (SELECT question1,
                 question2,
                 SUM(occurrences) AS occurrences
          FROM asmt.incorrect_question_pairs
          GROUP BY question1,
                   question2
          HAVING SUM(occurrences) >= 50)

我想要专栏prob_q1_q2成为 float列,这就是为什么我将分母/分子转换为 float .但在结果表中,我在该列中得到全零。

我想指出的是SUM(occurrences)将总计约 10 Billion ,所以列prob_q1_q2将包含极小的值。有没有办法在 Amazon Redshift 中存储这么小的值? ?

如何确保列中的所有值都非零 float ?

任何帮助,将不胜感激。

最佳答案

方法 1 - 我曾经有过同样的问题!就我而言,它是数百万行,所以我将结果乘以 10000。每当我想从该列中选择值时,我都会在 select 语句中除以 10000 以使其均匀。我知道这不是完美的解决方案,但对我有用。
方法 2 - 我创建了一个带有 Numeric(12,6) 数据类型的示例表,当我导入类似于您的结果集时,我可以看到浮点值高达 6 位小数精度。
enter image description here

我猜,当您使用 create table AS 命令时,转换不起作用,您需要创建指定数据类型的表,该数据类型强制将结果集存储到某个精度级别。这很奇怪!相同的选择如何返回 0.00,但是当插入到带有强制列的表中时,它返回 0.00333。
如果我做了一个错误的假设,请发表评论,我会重新调整我的答案。

关于sql - 在 Amazon Redshift 中存储极小的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42724392/

相关文章:

sql - 如何在 Redshift 中创建行号?

database - 将数据从 firebase 加载到 amazon redshift

amazon-web-services - 从 S3 中的 Parquet list 进行 Redshift 复制失败,并表示 MANIFEST 参数需要 S3 对象的完整路径

mysql - 基于从另一个表中提取的数据的 SQL 批量插入

mysql - 类似运算符的SQL查询

mysql - 在 SQL 中,什么是更快的 : LIMIT . .. OFFSET 或范围查询?

java - Redshift (Oracle) 的 Spark SQL 模拟 "SYSDATE"或 "CURRENT_DATE"

sql - 没有 "WITH NO SCHEMA BINDING"的 View 返回关系 "does not exist"错误

sql - 从包含数千条的 MySQL View 中查询单个记录是否相当于查询那几千条 + 1?

mysql - SQL查询中连接计数和非分组属性