Bagaimana untuk mendapatkan baris tertentu daripada jadual menggunakan "kumpulan mengikut" dan "susun mengikut"
P粉794851975
P粉794851975 2023-09-12 17:54:20
0
1
498

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粉794851975
P粉794851975

membalas semua(1)
P粉055726146

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;
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan