按三列排序表

时间:2013-02-22 02:14:42

标签: mysql sorting multiple-columns

寻找通过三种条件对订单进行排序的方法。我可以解决其中两个问题。示例表:

Buyer  Qty  Item_ID
James  1    12345
Jack   1    34564
John   3    13445
Kevin  1    83243
Bill   2    23434
Jack   3    23423

所以这里的诀窍是首先对买家进行分组 那么数量 然后是item_id

杰克有两个订单需要分组然后拉出并一起发货 其余订单需要按数量分组,然后按item_ID

排序

输出如下:

Buyer  Qty  Item_ID
Jack   1    34564
Jack   3    23423
James  1    12345
Kevin  1    83243
Bill   2    23434
Bob    2    23444
John   3    13445

买家不需要按多个订单分组 按数量排序,item_id分开Jacks订单。我们每天获得100个订单,多个来自同一个买家。需要按item_id对具有相同数量项目的订单进行排序,以简化从房间一端到另一端的库存拉动。似乎将买家分组可行,但尚未弄明白。

到目前为止最合理的查询:

    select * FROM orders
    WHERE printed = 0 
    AND status = 'completed' 
    AND address_name <> '' 
    group by buyer
    ORDER BY qty, id;

此查询会跳过同一买家的多个订单,并将其余订单正确排序。

我已经成功实施了答案1谢谢!

1 个答案:

答案 0 :(得分:1)

以下查询将为您提供所需的确切结果。在内部查询中,它生成相同买方实例的计数。然后它从买家列加入原始表。然后按相同的买方实例递减计数和其他列升序对其进行排序。

SELECT table1.buyer, qty, item_id 
FROM orders table1,
  (SELECT buyer, COUNT(*) as count FROM orders GROUP BY buyer) as table2
  WHERE table1.buyer = table2.buyer 
  ORDER BY count DESC, qty, item_id;

请参阅此fiddle