在给定特定条件 SQL 的情况下,仅对不同的值求和

Posted

技术标签:

【中文标题】在给定特定条件 SQL 的情况下,仅对不同的值求和【英文标题】:SUM only distinct values given certain criteria SQL 【发布时间】:2014-02-20 15:59:21 【问题描述】:

我有一张 Data 类似的表格

LayerID       Company id  Company name    Layer Name   Price
     1           1             x            x1          20
     2           1             x            x2          10 
     3           2             y            y1          50
     4           2             y            y2          50
     5           2             y            y3          50
     6           3             z            z1          15

我想要的是在应用 SQL 查询后拥有下表

Company id  Company name     Price
     1           x            30
     2           y            50 
     3           z            15

即以下规则适用:

    如果公司不同层的价格不同,那么总结一下 例如:对于 x 公司,它将是 20+10 = 30 如果公司不同层的价格相同,则取该数字 例如:对于公司 y,它将是 50,对于 z,它将是 15

我不确定我会如何在 SQL(用于 Access/VBA)中这样做,并且一直试图解决这个问题但无济于事。

提前感谢您的帮助

克劳迪

【问题讨论】:

【参考方案1】:

将产生您正在寻找的结果的 SQL 查询:

SELECT m.Company_id, m.Company_name, SUM(m.Price)
FROM 
(
  SELECT DISTINCT Company_id, Company_name, Price
  FROM MyTable 
) AS m
GROUP BY m.Company_id, m.Company_name

【讨论】:

【参考方案2】:

你可以这样做:

SELECT m.Company_id, m.Company_name, SUM(distinct m.Price)
FROM table m
GROUP BY m.Company_id, m.Company_name;

作为警告:我从不使用sum(distinct)。它通常表示底层数据结构或生成数据的子查询中有错误。

编辑:

为什么这样做不好?一般来说,你真正想要的是:

SUM(m.Price) where <some id> is distinct

但是你不能在没有子查询的情况下用 SQL 来表达它。如果以上是您想要的,那么当两个“id”具有相同的价格时,您就会遇到问题。 sum() 产生错误的值。

【讨论】:

我不知道你可以对不同的值求和。为什么这样做如此糟糕? @Gordon Linoff,我认为SUM(DISTINCT m.Price) 不能在 MS Access 中使用。我刚刚尝试了您的查询并收到错误:Syntax error (missing operator) in query expression 'Sum(DISTINCT m.Price)'.

以上是关于在给定特定条件 SQL 的情况下,仅对不同的值求和的主要内容,如果未能解决你的问题,请参考以下文章

在Oracle SQL中,只对特定条件下的字段进行求和。

根据不同的条件对两个不同的列进行分组和求和

SQL - 更新表,以便在给定另一列的键的情况下对一列求和

SQL:对来自两个不同表的值求和

需要一个 SQL 查询来从 SQL Server 数据库中获取特定条件下给定时间段的数据

窗口函数:仅对另一列中的不同值求和