mySQL - 来自不同行的Sum值,其中不同列中的两个值匹配

时间:2018-04-22 13:20:40

标签: mysql subquery

我的MySQL技能是有限的,通常我不需要从单个表中选择一些条件所需的列。现在我需要更多,而且我迷失了。

我想要的是添加两个不同列匹配的项目数量,并且所有数据都在同一个表格中。

表格示例;

Item    Quantity    Col1    Col2
A       1           123     234
A       3           456     758
A       2           588     258
A       2           234     456

我最初的想法是写一个条件如下的查询;

WHERE Col1 = Col2

我无法解开为什么我没有收到任何结果......直到今天早上我才意识到查询只检查同一行内的匹配。我意识到我需要写一个子查询,现在我就在这里。对我来说子查询很像代数。它开始很好,然后我在某个地方失去了自己。在我看来,这应该很简单,但我觉得我过于复杂了。

查询需要如何才能完成这项工作?我想学习这个,因为我知道将来我会需要它。

*修改

我想通过查询实现的目的是在Col1和Col2之间匹配时添加行数。

* EDIT2 不确定它是否给出了我想要做的任何提示,但是......

select Item, sum(Quantity)
from exampleTable
where col1 = 
(select col2
from exampleTable)

* edit3 - 我的问题的解决方案

事先我想为我的问题描述不好而道歉。 咨询了一位同事并解决了我的问题很简单。

select a.Quantity +
(select b.Quantity
from exampleTable b
where Col2 = Col1)
from exampleTable a

3 个答案:

答案 0 :(得分:0)

如果我理解你清楚你想要添加(总和)项目的数量,只要COL1和Col2相等......

以下是对它的查询

从COL1 = Col2

的示例中选择sum(QUANTITY)

答案 1 :(得分:0)

从table_name中选择sum(Quantity),其中col1 = col2

答案 2 :(得分:0)

也许这是子查询对两个列联合的数量和外部查询求和的总和,并测试出现的次数超过1次

Drop table if exists t;
create table t(Item varchar(1) ,  Quantity int,    Col1  int,  Col2 int);
insert into t values
('A'   ,    1       ,    123  ,   234),
('A'   ,    3       ,    456  ,   758),
('A'   ,    2       ,    588  ,   258),
('A'   ,    2       ,    234  ,   456);


select item,sum(sumqty) sumqty,sum(obs) sumcount, col
from
(
select item, sum(quantity) sumqty, count(*) as obs, col1 as col
from t 
group by item, col1
union all
select item, sum(quantity),count(*) as obs, col2
from t 
group by item, col2
) s
group by item, col having sum(obs) > 1;

+------+--------+----------+------+
| item | sumqty | sumcount | col  |
+------+--------+----------+------+
| A    |      3 |        2 |  234 |
| A    |      5 |        2 |  456 |
+------+--------+----------+------+
2 rows in set (0.00 sec)