SQL SUM,COUNT 仅用于唯一 ID

标签 sql postgresql join aggregate-functions exists

我只想计算唯一 ID 的总和和计数。

SELECT COUNT(orders.id), SUM(orders.total), SUM(orders.shipping) FROM "orders"
INNER JOIN "designer_orders" ON "designer_orders"."order_id" = "orders"."id" 
WHERE (designer_orders.state = 'pending' OR
       designer_orders.state = 'dispatched' OR
       designer_orders.state = 'completed')
  • 仅对唯一订单 ID 执行此操作。
  • 仅当 orders.id 唯一时才添加 orders.total。运输也是如此。
  • 避免添加重复项。

例如orders表内部加入了designer_orders表:

OrderId Total Some designer order column
 1       1000  2
 1       1000  3
 1       1000  5
 2       100   7
 3       133   8
 4       1000  10
 4       1000  20

在这种情况下:

  • 订单数应为 4。
  • 订单总数应为 2233。

架构:

  • 一个订单有多个设计师订单。
  • 一个设计师订单只有一个订单。

最佳答案

这样试试

SELECT COUNT(o.id) no_of_orders, 
       SUM(o.total) total, 
       SUM(o.shipping) shipping 
  FROM orders o JOIN 
(
    SELECT DISTINCT order_id
      FROM designer_orders
     WHERE state IN('pending', 'dispatched', 'completed')
) d 
    ON o.id = d.order_id

这是 SQLFiddle 演示

关于SQL SUM,COUNT 仅用于唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21545781/

相关文章:

php - 将另一个数据库连接添加到我的查询导致一些行看不到

r - 使用精确匹配和模糊匹配在 R 中连接两个大型数据集

mysql - 临时表不存在错误

SQL 最大参数

android - 使用迁移升级 Room DB 会导致数据库锁定

sql - Postgres : return first N rows per group for groups having a minimum countI

postgresql - 通过管道在两个服务器之间传输数据库

带条件列的 Mysql View

MySQL 错误 - "check syntax to use near ' %s”

sql - 具有语法错误的 PostgreSQL 子查询给出了有效结果