postgresql - 获取分组值除以总数

标签 postgresql group-by resultset

我有一张这样的 table :

+----+---------------+----------+
| id | city          | price    |
+----±---------------±----------+
| 1  | Paris         | 2.000,00 |
| 2  | London        | 500,00   |
| 3  | Paris         | 500,00   |
| 4  | Madrid        | 1.000,00 |
±----±---------------±----------±

像这样的请求:

select
    city,
    sum(price)
from orders
group by city
order by sum(price) desc

这给了我这样的结果:

+----------+---------------+
| city     | SUM(price)    |
+----------±---------------±
| Paris    | 2.500,00      |
| Madrid   | 1.000,00      |
| London   | 500,00        |
±----------±---------------±

我想要的是第三列中每个城市的价格比率,这样巴黎就有 62.50% 等等,如下所示:

+----------+---------------+-------------+
| city     | SUM(price)    | Ratio       |
+----------±---------------±-------------+
| Paris    | 2.500,00      | 62,50       |
| Madrid   | 1.000,00      | 25          |
| London   | 500,00        | 12,50       |
±----------±---------------±-------------±

目前,我必须在获得第一个结果集后计算 PHP 中的最后一列。我想知道是否有任何方法可以直接在 SQL 中执行此操作?

最佳答案

我建议使用 CTE 来提高阅读能力,但您将获得与 Giorgios 答案相同的性能。

WITH cte0 as (
     SELECT *
     FROM Orders
     WHERE <filters>
),
cte as (
     SELECT SUM(price) total
     FROM cte0 
)
SELECT city, sum(price), 100.0 * SUM(Price) /  cte.total
FROM cte0 
CROSS JOIN cte
GROUP BY city

关于postgresql - 获取分组值除以总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35556540/

相关文章:

java - 错误 "org.postgresql.Driver is not a valid javax.sql.DataSource implementation"不会影响任何内容。如何去除它?

group-by - 对 SELECT 中的 NUMC 字段求和

r - 分组因素的条件过滤器 - dplyr

c# - NHibernate - 流式传输大型结果集?

sql - 如何列出特定日期范围内未保留的属性?

ruby-on-rails - 推送到 heroku 时,rake 中止不接受 TCP/IP 连接

cassandra - Cassandra DB 的 Hector API 中的 SliceQuery 抛出 HInvalidRequestException : InvalidRequestException(why:Key may not be empty)

java - Java 中的 ResultSet 可以是 'null' 吗?

python - GeoAlchemy2 的 Alembic 迁移引发 NameError : name 'geoalchemy2' is not defined

mysql - 使用连接和分组进行复杂更新