【问题标题】:SQL how to join same value from one column table and then sum itSQL如何从一个列表中连接相同的值然后求和
【发布时间】:2021-07-28 09:07:42
【问题描述】:

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

[
  {
    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,而SH20 100。这个查询的总价格是300,应该是400,因为有2个'SH20'。

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

【问题讨论】:

  • 我很好奇WHERE IN ("SH20", "SH20", "SH21") .. 请发布您尝试的查询。
  • 已编辑@FaNo_FN 我添加了一些解释和示例。
  • 我删除了冲突的 DBMS 标签。请为您真正使用的数据库产品添加一个标签。
  • 我仍然对..productCode IN ("SH20", "SH20", "SH21") 感到困惑。SH20 不是重复了两次吗?不应该只是..productCode IN ("SH20", "SH21")吗?还是我在这里遗漏了什么?
  • 是的,这就是问题所在,我现在也更改标题以匹配我回答的问题。如果您尝试了下面的答案,它将打印正确的结果。我应该使用JOIN 而不是WHERE IN

标签: sql postgresql


【解决方案1】:

将产品表与您的输入数据连接起来,以获得产品 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;

【讨论】:

  • 哇,后面的答案比第一个更快。非常感谢!一定要学习一些 SQL Join 的用法。
【解决方案2】:

如果我理解正确,听起来您需要使用 GROUP BY。

SELECT sum(price) FROM product WHERE productCode in ("SH20", "SH20", "SH21") GROUP BY productCode

如果这是您正在寻找的行为,我建议您阅读 group by 的手册页并熟悉它 - 这是一种您会经常使用且非常值得学习的模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2015-04-26
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多