2013-05-16 32 views
0
$query = " 
SELECT a_orders.id, a_orders.billing, a_orders.type, 
    SUM(a_order_rows.quant_refunded*a_order_rows.price*((100-a_orders.discount)*.01)) as refund_total, 
    SUM(a_order_rows.quant*a_order_rows.price*((100-a_orders.discount)*.01)) as order_total, 
    GROUP_CONCAT(DISTINCT a_order_rows.date_refunded) as refund_dates 
FROM a_order_rows JOIN a_orders 
ON a_order_rows.order_id = a_orders.id 
GROUP BY a_orders.id, a_orders.billing 
HAVING MAX(a_order_rows.quant_refunded) > 0 
ORDER BY a_order_rows.date_refunded DESC, a_orders.id DESC 
LIMIT 50"; 

$query = " 
SELECT a_orders.id, a_orders.billing, a_orders.type, 
    SUM(a_order_rows.quant_refunded*a_order_rows.price*((100-a_orders.discount)*.01))+a_orders.refund_adjustment as refund_total, 
    SUM(a_order_rows.quant*a_order_rows.price*((100-a_orders.discount)*.01)) as order_total, 
    GROUP_CONCAT(DISTINCT a_order_rows.date_refunded) as refund_dates 
FROM a_order_rows JOIN a_orders 
ON a_order_rows.order_id = a_orders.id 
GROUP BY a_orders.id, a_orders.billing 
HAVING MAX(a_order_rows.quant_refunded) > 0 
ORDER BY a_order_rows.date_refunded DESC, a_orders.id DESC 
LIMIT 50"; 

通知+a_orders.refund_adjustment查詢2的2線?只是補充一點就是改變結果的順序。如果選擇該列而未將其添加到聚合中(例如,在第1行上添加之後a_orders.type,),也會發生同樣的情況。選擇其他列會影響ORDER BY子句嗎?

添加該列到混合後的結果不再訂購與date_refunded DESC預期。是什麼賦予了?我無法理解這會如何影響結果順序。

回答

0

您在做group by後訂購a_order_rows.date_refunded。包含此字段的聚合包括而不是

在MySQL中接受任何其他數據庫中的錯誤。但是,它會從匹配行之一中選擇一個任意值放置在此字段中。這個任意值可以從查詢的一個執行改變到下一個。你不能依賴它。

如果要通過date_refunded更穩定的方式來訂購,然後使用聚合函數:

ORDER BY min(a_order_rows.date_refunded) DESC, a_orders.id DESC 

ORDER BY max(a_order_rows.date_refunded) DESC, a_orders.id DESC 
+0

奇怪的是,它似乎是工作按計劃進行,而不選擇另外字段,但這對我來說很有意義。謝謝! – irregularexpressions