【发布时间】:2016-05-29 10:40:57
【问题描述】:
我使用的是 SQL,amazon redshift,但它与我听说的 PostGres 非常相似。
我有一个数据库,其中包含一个包含很多问题和答案的表格。每次有人陈述答案时,问题和答案都会重复。我想要一个查询,它列出了独特的问题以及这些问题的答案计数。但是,我只想显示最常回答的前 10 个答案。
所以我做了以下事情。我使用了一个窗口函数来显示按问题划分的答案计数。我对 COUNT(answer) 降序排序。但是,有些问题可以给出很多很多不同的答案,因此查询将列出数百行,其中包含该问题的所有答案。所以我让我的窗口成为一个子查询。我做了 SELECT * FROM 子查询,然后在子查询之外的 WHERE 子句中指定窗口/分区应小于或等于 10,以显示前十个答案)。这行得通。
我现在想显示为每个问题提供的每个答案的百分比。我可以使用 percent_rank 或 cume_dist 窗口函数来做到这一点。两者都具有相似的预期效果。
但是,我还想添加一个显示累积百分比的列。它应该显示给出答案的次数与该问题的答案总数的百分比。当您对该问题的 10 行进行向下分析时,该百分比应逐渐增加,以便在第 10 行以 1.00 或 100% 结束。
问题如下:如果一个问题只有 10 个或更少的潜在答案,那么它可以完美运行。但是,如果一个问题的答案超过 10 个,precent_rank 或 cume_dist 会根据总答案的数量计算出每个答案的百分比。我可以看到这并没有错,但我只想显示上面提到的前 10 个答案以及仅基于前 10 个的百分比!
任何关于如何让查询忘记其他 100 个答案并只查看我展示的前 10 个答案的建议将不胜感激。
非常感谢 my query
SELECT * FROM
(SELECT question, answer, COUNT(answer), row_number() OVER (PARTITION BY question ORDER BY count ASC) AS ranker
,question as had_to_insert_an_alias, COUNT(answer), cume_dist() OVER (PARTITION BY had_to_insert_an_alias ORDER BY count DESC) AS percent_ranker
FROM question_table
WHERE date_field >= '2013-10-01' and date_field < '2013-10-30'
group by question, answer) AS subquery
WHERE ranker <= 10
order by question;
【问题讨论】:
-
它最初是 PostGreSQL 8.0.2 的一个分支,但在底层进行了大量修改。此外,您的问题非常冗长且冗长。请包含一些示例数据(或指向 SQLFiddle 的链接)、您想要的结果以及您尝试过的代码。如果一张图片值一千字,那么实际代码至少值几百字。
-
如果您提供现有查询和表定义示例,则更容易给您一个好的答案。
-
嗨,我附上了一张显示我的查询的屏幕截图。在我写下“非常感谢”之后,这是我上面的大问题末尾的链接
-
感谢所有帮助
-
@187213 - 请不要发布屏幕截图的链接。我不愿意从只有 1 个代表的人那里点击潜在的点击诱饵。请将代码复制并粘贴到您的问题中。编辑器中有一些按钮可帮助将部分标记为特定格式的代码。如果我们需要复制粘贴您的代码以进行测试或我们的答案,这也很有帮助。
标签: sql postgresql window amazon-redshift