You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL复合类型数组数据查询:两类需求实现方法

针对PostgreSQL自定义类型的两个查询实现

1. 查询包含商品编号为6的所有订单

由于pedido表中的itemPedido是item_pedido类型的数组,且每个item_pedido包含mercadoria复合类型,需要用unnest()函数展开数组,再访问复合类型的字段:

SELECT DISTINCT p.*
FROM pedido p
JOIN unnest(p.itemPedido) AS item
ON (item.mercadoria).codigo = 6;

说明:

  • unnest(p.itemPedido)将订单中的商品项数组拆分为行记录
  • (item.mercadoria).codigo访问复合类型mercadoria中的codigo字段
  • DISTINCT确保同一个订单即使包含多个编号6的商品也只返回一次

2. 查询客户编号53的订单总金额

需要计算每个商品项的实际金额,再按需求汇总:

情况1:查询该客户每个订单的总金额

SELECT 
    p.codigo AS 订单编号,
    p.data_pedido AS 下单日期,
    SUM(
        (item.mercadoria).preco * item.quantidade * (1 - item.desconto)
    ) AS 订单总金额
FROM pedido p
JOIN unnest(p.itemPedido) AS item
ON p.codCliente = 53
GROUP BY p.codigo, p.data_pedido;

情况2:查询该客户所有订单的总金额

SELECT 
    SUM(
        (item.mercadoria).preco * item.quantidade * (1 - item.desconto)
    ) AS 客户总订单金额
FROM pedido p
JOIN unnest(p.itemPedido) AS item
ON p.codCliente = 53;

说明:

  • (item.mercadoria).preco获取商品单价,乘以购买数量item.quantidade得到原价
  • (1 - item.desconto)是折扣后的比例(假设desconto字段值为小数,比如0.1代表10%折扣;如果是百分比数值如10,则改为(1 - item.desconto/100))
  • 通过GROUP BY控制是按单个订单汇总还是整体汇总

内容的提问来源于stack exchange,提问作者Matheus Henriques

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:35:16