2016-05-04 49 views
1

我在MySQL中试过CREATE VIEW但我没有得到我所需要的。MySQL Query with LEFT JOIN,SUM和GROUP BY

我有两个表,servicios

+-------------+------------+----------+ 
| id_servicos | fecha  | cantidad | 
+-------------+------------+----------+ 
| 1   | 2016-05-02 | 2  | 
| 2   | 2016-05-03 | 3  | 
| 3   | 2016-05-03 | 5  | 
+-------------+------------+----------+ 

actuacion

+--------------+--------------+--------+ 
| id_actuacion | clv_servicio | grupo | 
+--------------+--------------+--------+ 
| 1   | 1   | RED | 
| 2   | 1   | RED | 
| 3   | 2   | BLUE | 
| 4   | 4   | ORANGE | 
| 5   | 3   | RED | 
+--------------+--------------+--------+ 

,我所要的输出与此类似:

RED, 7 
BLUE, 2 
ORANGE, 4 

所以我的查询看起来像这样

SELECT actuacion.grupo, 
     SUM(servicios.cantidad) AS total 
FROM (actuacion 
JOIN servicios ON actuacion.clv_servicio = servicios.id_servicos) 
GROUP BY actuacion.grupo 

,其结果是

RED, 9 
BLUE, 2 
ORANGE, 4 

我认为你有日期之前匹配(出生日期),以便然后量(cantidad)等的总和不添加红豆集团两次 我需要的RED的结果是7

任何帮助,非常感谢。

+0

尝试更好地解释为什么RED的结果是7.什么你总结吗? – arilia

+0

所以,根据提供的数据,似乎你的问题是重复的数据 –

回答

1

您可以在用作派生表的查询中的actuacion表中找到唯一组合,然后加入该查询。

这应该给你结果你想:

Select t.grupo, 
     Sum(servicios.cantidad) As total 
From (select distinct clv_servicio, grupo from actuacion) as t 
Join servicios On t.clv_servicio = servicios.id_servicos 
Group By t.grupo 
+1

完美的作品,这是我想要的。非常感谢你。 – Jose

+0

因为当我觉得这个查询给了我这个错误:#HY000View的SELECT包含FROM子句中的子查询 – Jose

+0

@Jose哦好的。我忘了MySQL对视图有特别的限制。一种解决方案是为子查询创建一个单独的视图,然后在主视图中加入。这可能无法带来好的表现,但如果我记得正确的话,您将无法使用索引。 – jpw

0

你可以使用子查询,并在下面用GROUP BY

SELECT grupo, 
     SUM(s.cantidad) total 
FROM (SELECT clv_servicio, 
      grupo 
     FROM actuacion a 
     GROUP BY clv_servicio, grupo 
    ) x 
JOIN servicios s ON x.clv_servicio = s.id_servicos 
GROUP BY grupo