2017-12-04 13 views
1

私は、次のクエリを実行しようとしていると私は、次のエラーを取得しています:構文エラー:予期しない「SUM」(和)

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sum(sl.duration) as duration, sum(sl.quantity_loss) as quantity_loss'

SELECT 
    lr.uid AS loss_reason_uid, 
    gl.uid AS gl_uid, 
    lt.uid AS lt_uid, 
    SUM(sl.duration * b.marginal_value_downtime) AS value_loss where en.state = 'downtime', 
    SUM(sl.quantity_loss * p.marginal_value) as value_loss where en.state != 'downtime', 
    SUM(sl.duration) AS duration, 
    SUM(sl.quantity_loss) AS quantity_loss, 
    COUNT(*) AS count 
FROM 
    sub_losses AS sl 

任意のアイデアを、なぜこの構文エラーは発生していますか?

+4

'group by'が必要で、' sum'に 'where'を使うことはできません。 'where'句がクエリではなく属性に適用されます。あなたは 'case'式を' sum'したいかもしれません。 – HoneyBadger

+0

これらのエイリアスがどのように 'en'、' lr'、 'gl'で定義されているか完全な問い合わせを表示してください... –

+0

2つの計算値を' value_loss'にリネームしています! – cdaiga

答えて

0

TRY THIS:上記以外は、私がユニークであることを確認するためにvalue_loss1を与えているので、一度クエリの単一ブロックよりも、同じALIASまたはCOLUMN NAME以上を使用することを許可されていませんコメントしています。

SELECT 
    lr.uid AS loss_reason_uid, 
    gl.uid AS gl_uid, 
    lt.uid AS lt_uid, 
    SUM(CASE WHEN en.state = 'downtime' THEN (sl.duration * b.marginal_value_downtime) ELSE 0 END) AS value_loss, 
    SUM(CASE WHEN en.state != 'downtime' THEN (sl.quantity_loss * p.marginal_value) ELSE 0 END) AS value_loss1, 
    SUM(sl.duration) AS duration, 
    SUM(sl.quantity_loss) AS quantity_loss, 
    COUNT(*) AS count 
FROM sub_losses AS sl 
GROUP BY lr.uid, 
     gl.uid, 
     lt.uid 
+0

実際には 'value_loss'カラムだけが必要でした。私は私のソリューションを掲載しました。ご回答有難うございます。 – aryan87

0

これは私に役立ちました。ガイドのための@HoneyBadgerに感謝します。

SELECT 
    lr.uid AS loss_reason_uid, 
     gl.uid AS gl_uid, 
     lt.uid AS lt_uid, 
     SUM(CASE WHEN en.state = 'downtime' THEN sl.duration * b.marginal_value_downtime ELSE sl.quantity_loss * p.marginal_value END) AS value_loss, 
     SUM(sl.duration) AS duration, 
     SUM(sl.quantity_loss) AS quantity_loss, 
     COUNT(*) AS count 
FROM 
    sub_losses AS sl 
+1

信頼できる結果を得るには 'group by'が必要です。このクエリは、互換性モードでない限り、新しいmysqlバージョンではエラーになります。 – HoneyBadger

関連する問題