Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mendapatkan baris tertentu daripada jadual menggunakan "kumpulan mengikut" dan "susun mengikut"

Saya ada meja seperti ini:

tmp_id Ketersediaan produk (0 dan 1) ada_tersedia(0 dan 1) kiraan_saham(integer) product_id (integer)
1 1 1 0 1
2 1 1 4 1

Saya perlu mendapatkan produk pertama yang tersedia untuk setiap product_id. Produk yang ada kena check dulu product_availability,然后检查is_available,最后检查stock_count。 (当 product_availability1 时,产品可用,然后 is_available1 并且库存中至少有一种产品1. )

Saya nak tunjuk produk yang ada dulu, kalau tiada produk yang ada, tak kisah produk mana yang ditunjukkan (sekiranya tidak ada, yang pertama akan berkesan juga).

(Dalam contoh di atas, saya perlu mendapatkan produk untuk tmp_id2 dahulu.)

Soalan: Soalan saya ialah bagaimana untuk menulis pertanyaan MYSQL untuk mencapai keperluan saya?

Saya boleh mendapatkan produk saya dalam susunan yang saya mahu menggunakan arahan berikut, tetapi saya tidak tahu apa yang perlu dilakukan seterusnya untuk mendapatkan produk sedia ada yang pertama menggunakan GROUP BY:

SELECT
    pa.*
FROM
    `product_advanced` AS `pa`
ORDER BY
    `pa`.`product_availability` DESC,
    `pa`.`is_available` DESC,
    `pa`.`stock_count` DESC
    

Nota: Sudah tentu ini hanyalah demo ringkas tentang apa yang saya ada, kod sebenar adalah lebih kompleks dan mempunyai berbilang gabungan dan perkara lain.

P粉794851975P粉794851975381 hari yang lalu383

membalas semua(1)saya akan balas

  • P粉055726146

    P粉0557261462023-09-13 14:05:48

    Ini boleh dilakukan menggunakan row_number() yang mengembalikan nombor baris unik untuk setiap baris dalam partition

    WITH cte AS (
      SELECT *, ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY product_availability DESC, is_available DESC, stock_count DESC) AS rn
      FROM product_advanced
    )
    SELECT tmp_id, product_availability, is_available, stock_count, product_id  
    FROM cte 
    WHERE rn = 1;

    balas
    0
  • Batalbalas