【发布时间】:2011-01-13 16:40:41
【问题描述】:
我有两个查询返回单列双精度值:
(SELECT scale
FROM (SELECT title,
scale,
dense_rank() OVER (PARTITION BY title
ORDER BY scale ASC) AS r
FROM signatures) t
WHERE r = 1)
...和:
(SELECT scale
FROM (SELECT scale,
dense_rank() OVER (PARTITION BY title
ORDER BY scale ASC) AS r
FROM signatures) t
WHERE r = 2)
我正在尝试选择第一个查询 (Q1) 除以第二个查询 (Q2)。即,(来自 Q1 的第 1 行)/(来自第 2 季度的第 1 行)。然后继续往下走。
我试过了:
SELECT ((SELECT scale
FROM (SELECT title,
scale,
dense_rank() OVER (PARTITION BY title
ORDER BY scale ASC) AS r
FROM signatures) t
WHERE r = 1)
/
(SELECT scale
FROM (SELECT scale,
dense_rank() OVER (PARTITION BY title
ORDER BY scale ASC) AS r
FROM signatures) t
WHERE r = 2)
)
但是没有运气。 任何人都可以看到这样做的方法吗?我可以分别发送这两个查询,然后运行一个循环并划分元素,但这不适用于半大型记录集。
另外,没关系,但我使用的是 PostgreSQL。
【问题讨论】:
-
您知道
DENSE_RANK在处理关系时会返回相同的值吗?例如,您可能有三个实例并列第二名,这将在您的部门中引起悲伤... -
@OMG。好的,但是如果我单独运行查询,我会得到正确的列结果。难道不能在一个语句中划分这两个吗?
-
我可以定义一个本地临时表来存储每个查询的结果列,然后将它们相乘吗?
-
后退一步:对于每组具有相同标题的行,您想将最小比例除以下一个最小比例吗?
-
@araqnid:就是这样!我认为dataduck(下面的答案)是在正确的轨道上,但我仍然需要实现它。
标签: php sql postgresql