首页 > 解决方案 > SQL如何从一个列表中连接相同的值然后求和

问题描述

这里的问题是我有一个接受这些输入的程序

[
  {
    customer: 'Alexandra'
    productCode: 'SH20'
  },
  {
    customer: 'Alex'
    productCode: 'SH20'
  },
  {
    customer: 'Alexis'
    productCode: 'SH21'
  }
]

每个产品代码都有自己的价格,表产品是这样的

{
  id: 1,
  productCode: 'SH20',
  name: 'Tires',
  price: 100
}

我想根据输入总结产品的总价格,但是使用WHERE IN ("SH20", "SH20", "SH21")只会显示“SH20”中的 1 行,如果我把它总结出来,我得到的产品总价格是错误的。

如何使用 SQL 选择包括重复项在内的所有行并对其求和?这种问题只能用SQL来解决吗?

编辑:

尝试查询,以免假设产品SH21成本为 200 和SH20100。此查询的总价格是 300,应该是 400,因为有 2 'SH20'。

SELECT sum(price) FROM product WHERE productCode in ('SH20', 'SH20', 'SH21') 

标签: sqlpostgresql

解决方案


将产品表与您的输入数据连接起来,以获得产品 SH20 两次。

SELECT SUM(product.price) AS total
FROM product 
JOIN
(
  SELECT 'SH20' AS productcode
  UNION ALL
  SELECT 'SH20' AS productcode
  UNION ALL
  SELECT 'SH21' AS productcode
) requested ON requested.productcode = product.productcode;

感谢您接受这一点:-) 这与VALUES替代条款相同:

SELECT SUM(product.price) AS total
FROM product 
JOIN (VALUES ('SH20'), ('SH20'), ('SH21')) AS requested(productcode)
  ON requested.productcode = product.productcode;

推荐阅读