嗨我有像
这样的Sql结果
我的查询就像
SELECT sales_flat_order.entity_id AS entity_id,
CASE
WHEN sales_flat_order.`grand_total` BETWEEN '0' AND '100.99' THEN '0->100.99'
WHEN sales_flat_order.`grand_total` BETWEEN '101' AND '150.99' THEN >'101-150.99'
WHEN sales_flat_order.`grand_total` BETWEEN '151' AND '200.99' THEN >'151-200.99'
WHEN sales_flat_order.`grand_total` BETWEEN '201' AND '250.99' THEN >'201-250.99'
WHEN sales_flat_order.`grand_total` BETWEEN '251' AND '300.99' THEN >'251-300.99'
WHEN sales_flat_order.`grand_total` BETWEEN '301' AND '350.99' THEN >'301-350.99'
WHEN sales_flat_order.`grand_total` BETWEEN '351' AND '400.99' THEN >'351-400.99'
WHEN sales_flat_order.`grand_total` BETWEEN '401' AND '450.99' THEN >'401-450.99'
WHEN sales_flat_order.`grand_total` BETWEEN '451' AND '500.99' THEN >'451-500.99'
ELSE '501+'
END AS 'order_range',
CONCAT(MONTHNAME(sales_flat_order.created_at), ' - ', >YEAR(sales_flat_order.created_at)) AS 'Month',
CONCAT('$', FORMAT(SUM(sales_flat_order.`grand_total`), 2)) AS 'Sales',
sales_flat_order.`grand_total` AS Amount,
COUNT(sales_flat_order.entity_id) AS 'Orders'
FROM sales_flat_order GROUP BY MONTH,order_range
ORDER BY Amount ASC
我需要通过升序第二列'订单范围'来订购结果。
我的预期答案应该是
Feb 2015 | 0-100 | XXX <br>
Feb 2015 | 101-150| XXX <br>
Feb 2015 | 150-200| XXX <br>
Feb 2015 | 200-250| XXX <br>
Feb 2015 | 250-300| XXX <br>
答案 0 :(得分:0)
您可以在此处使用SUBSTRING_INDEX
:
ORDER BY
Month,
CAST(SUBSTRING_INDEX(order_range, '-', 1) AS UNSIGNED);
这是一个演示,表明这个排序逻辑有效:
修改强>
不要将年份和月份作为文本报告,首先是月份,然后是年份,因为您也会在那里邀请排序问题。相反,请使用DATE_FORMAT
订购:
ORDER BY
DATE_FORMAT(sales_flat_order.created_at, '%Y-%m'),
CAST(SUBSTRING_INDEX(order_range, '-', 1) AS UNSIGNED);
答案 1 :(得分:0)
只需使用以下内容更新“订单依据”查询部分:
ORDER BY MONTH, FIELD(order_range,
'0->100.99',
'101-150.99',
'201-250.99',
...
)