我想查询我的数据库,以了解表中元素的哪个分数/百分比大于/小于给定值。
例如,假设我有一个表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;
但我想用一个查询来做,以避免后处理结果。
答案 0 :(得分:3)
如果您只想在单个查询中使用UNION
SELECT COUNT(*), 'total'
FROM shopping_list
UNION
SELECT COUNT(*),'greater'
FROM shopping_list
WHERE price > 4;
答案 1 :(得分:1)
最简单的方法是使用avg()
:
SELECT AVG( (price > 4)::float)
FROM shopping_list;
答案 2 :(得分:0)
我找到了完全符合我想要的聚合函数PERCENT_RANK
:
SELECT PERCENT_RANK(4) WITHIN GROUP (ORDER BY price)
FROM shopping_list;
-- returns 0.5
答案 3 :(得分:0)
获得两种结果的一种方法如下:
select count(*) as total,
(select count(*) from shopping_list where price > 4) as greater
from shopping_list
它将使用您指定的名称将两个结果都放在一行中。但是,它确实涉及查询中的查询。