基本上,我需要做的是将表中的某些值连接起来,按新的连接结果分组以应用SUM函数,然后我要在另一个表中搜索连接的值,在该表中我必须应用相同的concat函数并能够比较这些值,对于匹配的值,返回列值
到目前为止,我已经创建了此查询,但是无法从第二个表中返回所需的列。
SELECT
`model`,`size`,`color_temp`,`lumen_out`, SUM(`order_qty`),
CONCAT(`model`,`size`,`color_temp`,`lumen_out`) AS concatenate
FROM `sales`
GROUP BY concatenate, `model`, `size`, `color_temp`,`lumen_out`
HAVING concatenate IN (
SELECT CONCAT(`model`,`size`,`color_temp`,`lumen_out`) FROM `pcbs`
)
我想要得到的东西如下:
model size color lumen qty concatenate pcb
LCL 2 30 ML 93 LCL230ML 93072008-2102
LCL 2 35 ML 57 LCL235ML 93072009-2104
LCL 2 40 ML 66 LCL240ML 93072009-2104
答案 0 :(得分:0)
您可以像下面这样联接两个“表表达式”(在SELECT
中充当表):
select
a.*, b.*
from (
SELECT
`model`,`size`,`color_temp`,`lumen_out`, SUM(`order_qty`),
CONCAT(`model`,`size`,`color_temp`,`lumen_out`) AS concatenate
FROM `sales`
GROUP BY concatenate, `model`, `size`, `color_temp`,`lumen_out`
) a
join (
SELECT
`model`,`size`,`color_temp`,`lumen_out`, SUM(`order_qty`),
CONCAT(`model`,`size`,`color_temp`,`lumen_out`) AS concatenate
FROM `pcbs`
GROUP BY concatenate, `model`, `size`, `color_temp`,`lumen_out`
) b on a.concatenate = b.concatenate
答案 1 :(得分:0)
为什么要串联join
的值?只需按原样使用值即可。
所以:
select s.*, p.*
from (select model, size, color_temp, lumen_out, sum(order_qty) as qty
from sales
group by model, size, color_temp, lumen_out
) s join
(select model, size, color_temp, lumen_out, sum(order_qty) as qty
from pcbs
group by model, size, color_temp, lumen_out
) p
on p.model = s.model and
p.size = s.size and
p.color_temp = s.color_temp and
p.lumen_out = s.lumen_out;
这也应该具有更好的性能。
请注意,这只会保留两个表中完全匹配的行。如果要所有行,则正确的结构是full join
,但是MySQL不支持。有其他方法。但是,您的问题表明您只需要匹配的行。