-2

注文を3つの条件でソートする方法を探しています。問題なく2枚ゲットできます。表の例:

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

ここでのコツは、最初に購入者をグループ化し、
次に数量、item_idの順にグループ化することです。

ジャックには、グループ化してまとめて出荷する必要がある 2 つの注文があります。残りの注文は、数量別にグループ化し、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

バイヤーは、複数の注文をグループ化して、数量で並べ替えるだけで並べ替える必要はありません。1 日に何百件もの注文があり、同じバイヤーから複数件の注文があります。部屋の端から端まで簡単に在庫を移動できるように、アイテム数が同じ注文は item_id で並べ替える必要があります。バイヤーのグループ化は機能するようですが、まだ解決していません。

これまでで最も合理的なクエリ:

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

このクエリは、同じ購入者からの複数の注文をスキップし、残りを適切に並べ替えます。

回答 1 を正常に実装しました。ありがとうございます。

4

1 に答える 1

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;

このフィドルを参照してください。

于 2013-02-22T16:29:50.463 に答える