2016-07-06 48 views
0

我遇到了一些麻煩,使用了操作SUM的結果,它在where子句中稱爲「weight」。我會很感激你的幫助。下面是該查詢:在WHERE子句中使用SUM結果時出錯

SELECT o.reference 
    , SUM(od.product_weight * od.product_quantity) weight 
    , SUM(od.total_price_tax_incl) total_paid_products 
    , d.price 
    , o.module 
    , rw.id_range_weight 
    FROM ps_orders o 
    , ps_order_detail od 
    , ps_product p 
    , ps_supplier s 
    , ps_delivery d 
    , ps_address a 
    , ps_state state 
    , ps_range_weight rw 
WHERE o.id_order = od.id_order 
    AND p.id_product = od.product_id 
    AND s.id_supplier = p.id_supplier 
    AND o.id_address_delivery = a.id_address 
    AND a.id_state = state.id_state 
    AND d.id_zone = state.id_zone 
    AND d.id_range_weight = rw.id_range_weight 
    AND rw.delimiter1 <= weight 
    AND weight < rw.delimiter2 
    AND 5 = rw.id_carrier 
    AND p.id_supplier = 1 
    AND YEAR(o.date_upd) = 2016 
    AND MONTH(o.date_upd) = 5 
    AND o.current_state IN(2,3,4,5,15,16) 
    AND o.module IN('paypal','redsys','bankwire') 
GROUP 
    BY o.reference 
ORDER 
    BY o.date_upd DESC 

到WHERE子句沒有SUM的結果,0值總是...如果我更換體重用10多家它完美的作品,例如值「重」而不是重量:

sql result

謝謝你們的時間!

+0

那麼問題是什麼?什麼不起作用?它怎麼不工作? –

+0

通常,SELECT子句中的非聚合列也應包含在GROUP BY子句中。請不要使用古老的連接語法。 – Strawberry

+0

你好@SamiKuhmonen,在where子句中使用「weight」時的結果與我使用「0」時的結果相同,但weight值從不爲0,它必須是10,而且......我不知道爲什麼它不保留SUM值。 這個語法有什麼問題@Strawberry? –

回答

0

我找到了答案,這要歸功於@scaisEdge這個

HAVING rw.delimiter1 <= weight AND weight < rw.delimiter2 

,也感謝@Strawberry讓我知道,不SELECT子句中的聚合列也應包含在GROUP BY子句中。

下面是完整的查詢

SELECT o.reference 
    , Sum(od.product_weight * od.product_quantity) AS weight 
    , SUM(od.total_price_tax_incl) AS total_paid_products 
    , d.price 
    , o.module 
    , rw.id_range_weight 
    FROM ps_orders o 
    , ps_order_detail od 
    , ps_product p 
    , ps_supplier s 
    , ps_delivery d 
    , ps_address a 
    , ps_state state 
    , ps_range_weight rw 
WHERE o.id_order = od.id_order 
    AND p.id_product = od.product_id 
    AND s.id_supplier = p.id_supplier 
    AND o.id_address_delivery = a.id_address 
    AND a.id_state = state.id_state 
    AND d.id_zone = state.id_zone 
    AND d.id_range_weight = rw.id_range_weight 
    AND 5 = rw.id_carrier 
    AND p.id_supplier = 1 
    AND year(o.date_upd) = 2016 
    AND month(o.date_upd) = 5 
    AND (o.current_state = 2 
     OR o.current_state = 3 
     OR o.current_state = 4 
     OR o.current_state = 5 
     OR o.current_state = 15 
     OR o.current_state = 16) 
    AND (o.module = 'paypal' 
     OR o.module = 'redsys' 
     OR o.module = 'bankwire') 
GROUP 
    BY o.reference 
    , rw.delimiter1 
    , rw.delimiter2 
HAVING rw.delimiter1 <= weight 
    AND weight < rw.delimiter2 
ORDER 
    BY o.date_upd desc 

謝謝你們的時間。

2

對於具有和聚合函數使用不到哪

SELECT o.reference, Sum(od.product_weight * od.product_quantity) as weight, 
SUM(od.total_price_tax_incl) as total_paid_products, d.price, o.module, rw.id_range_weight 

FROM ps_orders o, ps_order_detail od, ps_product p, ps_supplier s, ps_delivery d, 
ps_address a, ps_state state, ps_range_weight rw 

WHERE o.id_order = od.id_order AND p.id_product = od.product_id AND 
s.id_supplier = p.id_supplier AND o.id_address_delivery = a.id_address 
AND a.id_state = state.id_state AND d.id_zone = state.id_zone 
AND d.id_range_weight = rw.id_range_weight 

AND 5 = rw.id_carrier 
AND p.id_supplier = 1 AND year(o.date_upd) = 2016 AND month(o.date_upd) = 5 
AND (o.current_state = 2 OR o.current_state = 3 OR o.current_state = 4 OR 
o.current_state = 5 OR o.current_state = 15 OR o.current_state = 16) 
AND (o.module = 'paypal' OR o.module = 'redsys' OR o.module = 'bankwire') 

GROUP BY o.reference 

HAVING rw.delimiter1 <= weight AND weight < rw.delimiter2 

ORDER BY o.date_upd desc 
+0

你好@scaisEdge,謝謝你的回答,但是它給了我一個錯誤「'having clause'中的未知列'rw.delimiter1' –