使用LEFT JOIN,SUM和GROUP BY进行MySQL查询

时间:2016-05-04 11:51:19

标签: mysql sql

我在MySQL中尝试了CREATE VIEW,但我得不到我需要的东西。

我有两张桌子,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

我认为你必须在日期(fecha)之前匹配然后是数量之和(cantidad),所以不要加两倍RED组 我需要RED的结果是7

非常感谢任何帮助。

2 个答案:

答案 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 :(得分: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