2016-05-04 30 views
1

私はCREATE VIEWをMySQLで試しましたが、私は必要なものを手に入れません。LEFT JOIN、SUM、GROUP BYのMySQLクエリ

私は2つのテーブル、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 

、結果は私はあなたがそのように量(cantidad)との合計は、私が必要と二回REDグループ を追加しない日付の前に(fecha)を一致させるために持っていると思う

RED, 9 
BLUE, 2 
ORANGE, 4 

ですREDの結果は7

です。何か助けていただければ幸いです。

+0

はREDの結果は7何である理由をよりよく説明しようあなたは合計ですか? – arilia

+0

提供されたデータに基づいて、問題は重複しているようです –

答えて

1

派生テーブルとして使用されるクエリ内のactuacionテーブルで一意の組み合わせを見つけて、それに参加することができます。

これは、あなたが望む結果を与える必要があります:あなたは、サブクエリを使用して、次の中GROUP BYを使用することができ

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 Oh ok。私は、MySQLにはビューに対する制限があることを忘れていました。 1つの解決策は、サブクエリの別のビューを作成し、代わりにメインビューのビューに結合することです。これは、私が正しく思い出した場合、インデックスを使用することができないので、良いパフォーマンスをもたらさないかもしれません。 – jpw

0

を:

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