【问题标题】:sort table by three columns按三列排序表
【发布时间】:2013-02-22 02:14:41
【问题描述】:

寻找一种按三个条件对订单进行排序的方法。我可以毫无问题地得到其中两个。示例表:

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

所以这里的诀窍是首先将买家分组,
然后数量 然后是 item_id

Jack 有两个订单需要组合在一起,然后拉到一起发货 剩下的订单需要按qty分组,然后按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,谢谢!

【问题讨论】:

  • 您在哪里尝试过这样做?
  • 我认为您只需要order by Buyer, qty, item_ID 而不是“分组依据”是不是错了?看到预期的输出也会很有用
  • 我希望你能得到第一个问题的答案。所以,你会接受它的答案。如果您还有其他问题,最好创建一个新问题而不详细说明现有已解决的问题。从这个问答中受益的不仅仅是你。所以保持这种格式,然后其他人可以使用该线程。顺便说一句,错误是不言自明的。您的 paypal_ipn_orders 表中没有 item_number 列。(确认,它可能是 item_id)

标签: mysql sorting multiple-columns


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多