我的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
答案 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)