これはほとんどわかっていますが、50以上のGoogle検索の後に、私は質問します:本質的にsumif関数であるdbに列を追加するにはどうすればよいですか?私は多くの関連する質問をミニテーブルのテーブルを見るための単純なSelect文として見てきましたが、実際にはの合計を表示する列を追加したいと考えていました。私はこれを取って、その後の分析のためにRにデータを引っ張っています。2つのSUM CASE文をMySQLの列更新として追加します
Excelでは、[]は表の列を表すように機能します。それはSerial#で2つの領域に分割されています。シリアルの最初の6桁は「親」を示し、後半は「子」を示します。下のBSA101で見られるように、1つの親は複数の子を持つことができます。私がしようとしているのは、子供を作るために費やされたすべての費用(親子費用)を合計することです。したがって、親の総費用は、以下の両方の子供に割り当てられます。
"パッキング"は最後のステップですので、ここでは合計が終わって重複がないようにしたいと思っています。
例
=IF(LEN([serial])>6,IF([process]="Packing",SUMIF([serial],[@serial],[process_cost])+SUMIF([serial],LEFT([@serial],6),[process_cost]),""),"")
serial process process_cost total_child_cost
BSA101A33 Packing 10 160
BSA101A34 Packing 10 195
BSA101 Cast 50 ""
BSA101 Mold 30 ""
BSA101 Mold 30 ""
BSA101A33 Finish 15 ""
BSA101A34 Finish 25 ""
BSA101A33 Polish 25 ""
BSA101A34 Polish 50 ""
^目的のテーブル結果
上記MySQLの試み:http://sqlfiddle.com/#!9/b0e58
:この記事は私 Adding Case StatementsSQLフィドルを助けました
data
にtotal_cost
という列を追加しました。現在、私は研究の後にHAVING
句について語っていますが、どこに配置するのかわからない "グループ機能の無効な使用"エラーが発生しています。
UPDATE data
SET total__child_cost =
(CASE WHEN length(serial) > 6
AND process = 'Packing'
THEN
IF(serial = serial, sum(process_cost),0) END)
+
(CASE WHEN left(serial,6) = serial
THEN sum(process_cost)
END)
参照[なぜ私は非常に単純なSQLクエリであることを私には思える何のためにMCVEを提供する必要があります](http://meta.stackoverflow.com/questions/333952/why-should-i-provide-非常にシンプルなSQLクエリ) – Strawberry
申し訳ありませんが、私はこれらを尋ねるとSQL Fiddleを忘れてしまいます - ブックマークしてください!まもなくこの例を追加します。 –
フィディはそれの最も重要な部分です。 – Strawberry