在给定特定条件 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 的情况下,仅对不同的值求和的主要内容,如果未能解决你的问题,请参考以下文章