Postgresql:查询以了解值的哪一部分是 larger/smaller
Postgresql: Query to know which fraction of the values are larger/smaller
我想查询我的数据库以了解 table 的哪些元素 fraction/percentage 比给定值 larger/smaller。
例如,假设我有一个具有以下架构的 table shopping_list
:
id integer
name text
price double precision
内容:
id name price
1 banana 1
2 book 20
3 chicken 5
4 chocolate 3
我现在要购买一件价格为 4 的新商品,我想知道这件新商品在购物清单中的排名。在这种情况下,元素将大于元素的 50%。
我知道我可以 运行 两个查询和 count
元素的数量,例如:
-- returns = 4
SELECT COUNT(*)
FROM shopping_list;
-- returns = 2
SELECT COUNT(*)
FROM shopping_list
WHERE price > 4;
但我想用单个查询来完成,以避免 post 处理结果。
我找到了聚合函数 PERCENT_RANK
,它完全符合我的要求:
SELECT PERCENT_RANK(4) WITHIN GROUP (ORDER BY price)
FROM shopping_list;
-- returns 0.5
如果您只想在单个查询中使用它们,请使用 UNION
SELECT COUNT(*), 'total'
FROM shopping_list
UNION
SELECT COUNT(*),'greater'
FROM shopping_list
WHERE price > 4;
获得两个结果的一种方法如下:
select count(*) as total,
(select count(*) from shopping_list where price > 4) as greater
from shopping_list
它将在一行中获得两个结果,并使用您指定的名称。但是,它确实涉及查询中的查询。
最简单的方法是使用avg()
:
SELECT AVG( (price > 4)::float)
FROM shopping_list;
我想查询我的数据库以了解 table 的哪些元素 fraction/percentage 比给定值 larger/smaller。
例如,假设我有一个具有以下架构的 table shopping_list
:
id integer
name text
price double precision
内容:
id name price
1 banana 1
2 book 20
3 chicken 5
4 chocolate 3
我现在要购买一件价格为 4 的新商品,我想知道这件新商品在购物清单中的排名。在这种情况下,元素将大于元素的 50%。
我知道我可以 运行 两个查询和 count
元素的数量,例如:
-- returns = 4
SELECT COUNT(*)
FROM shopping_list;
-- returns = 2
SELECT COUNT(*)
FROM shopping_list
WHERE price > 4;
但我想用单个查询来完成,以避免 post 处理结果。
我找到了聚合函数 PERCENT_RANK
,它完全符合我的要求:
SELECT PERCENT_RANK(4) WITHIN GROUP (ORDER BY price)
FROM shopping_list;
-- returns 0.5
如果您只想在单个查询中使用它们,请使用 UNION
SELECT COUNT(*), 'total'
FROM shopping_list
UNION
SELECT COUNT(*),'greater'
FROM shopping_list
WHERE price > 4;
获得两个结果的一种方法如下:
select count(*) as total,
(select count(*) from shopping_list where price > 4) as greater
from shopping_list
它将在一行中获得两个结果,并使用您指定的名称。但是,它确实涉及查询中的查询。
最简单的方法是使用avg()
:
SELECT AVG( (price > 4)::float)
FROM shopping_list;