2017-08-03 22 views
-1

ありがとうご意見ありがとうございました。別の角度から試してみます。mysqlの結合テーブル結合

これらの結果を生成するために、このクエリをどのように書き込むことができますか?上記のクエリから

CompID CompeteID Casting  Fishing  Total  
     1  1  265.89 425.56  691.45 
     1  9  212.31  84.76  285.92 
     1  7   0.00 285.92  285.92 
     1  8   0.00  44.52  44.52 
    ORDER BY Total DESC 

SELECT cs.CompID, ic.CompeteID 
, MAX(IF(cast.CastType_ID BETWEEN 6 AND 12, cast.Length, 0)) + SUM(IF(cast.CastType_ID < 6, 40 - (cast.Length * 2), 0)) AS 'Casting' 
FROM `comp-setup` cs 
INNER JOIN `input-competitor` ic 
    ON cs.CompID = ic.Comp_ID 
LEFT JOIN `input-casting` cast 
    ON cast.Compete_ID = ic.CompeteID 
GROUP BY ic.CompeteID 

UNION ALL 

SELECT cs.CompID, ic.CompeteID 
, SUM((iw.Weight * ca.Factor) + '1') AS 'Fishing' 
FROM `comp-setup` cs 
INNER JOIN `input-competitor` ic 
    ON cs.CompID = ic.Comp_ID 
LEFT JOIN `input-weighin` iw 
    ON iw.Compete_ID = ic.CompeteID 
INNER JOIN `input-catchpoints` ca 
    ON ca.PointsCatchID = iw.PointsCatch_ID 
GROUP BY ic.CompeteID 

結果、私は別のデータにブレイクラインと釣りヘッダを追加しました。

CompID CompeteID Casting 
     1  1  265.89 
     1  7    0 
     1  8    0 
     1  9  212.31 
---------------------------------- 
         Fishing 
     1  1  425.56 
     1  7  285.92 
     1  8   44.52 
     1  9   84.76 
+0

は、私たちはあなたのためにそれを追加することができますコメントに画像リンクを追加します。 –

+3

'CompeteID'だけで集約している間に非集約カラムを選択しているので、' GROUP BY'を間違って使用しています。いくつかのサンプルデータは素晴らしいかもしれませんし、またあなたの質問を最小限の例に減らすことができれば助けになるでしょう。 –

+0

総計合計:https://i.stack.imgur.com/6wxxv.png –

答えて

0

日これで私はうまくいっています。私は今日この例を見つけました。このソリューションに私を導いてくれました。よりよい方法があれば投稿してください。しかし、これは私が必要とするものです!ここで

SELECT Sub1.CompID, Sub1.CompeteID, Sub2.Casting, Sub1.Fishing, Sub2.Casting + Sub1.Fishing AS Total 
FROM 
    (SELECT cs.CompID, ic.CompeteID, SUM((iw.Weight * ca.Factor) + '1') AS Fishing 
FROM `comp-setup` cs 
    INNER JOIN `input-competitor` ic ON cs.CompID = ic.Comp_ID 
    INNER JOIN `input-weighin` iw ON iw.Compete_ID = ic.CompeteID 
    INNER JOIN `input-catchpoints` ca ON ca.PointsCatchID = iw.PointsCatch_ID 
    INNER JOIN `list-grade` gr ON ic.Grade_ID = gr.GradeID 
    INNER JOIN `list-division` ld ON ic.Div_ID = ld.DivID 
    GROUP BY ic.CompeteID) Sub1 

INNER JOIN 

(SELECT cs.CompID, ic.CompeteID, MAX(IF(cast.CastType_ID BETWEEN 6 AND 12, cast.Length, 0)) + SUM(IF(cast.CastType_ID < 6, 40 - (cast.Length * 2), 0)) AS Casting 
FROM `comp-setup` cs 
    INNER JOIN `input-competitor` ic ON cs.CompID = ic.Comp_ID 
    LEFT JOIN `input-casting` cast ON cast.Compete_ID = ic.CompeteID 
    GROUP BY ic.CompeteID) Sub2 

ON Sub1.CompeteID = Sub2.CompeteID 
ORDER BY Total DESC 

は私が必要な例とポストです: MYSQL LEFT JOIN with GROUP BY