Rumah > Soal Jawab > teks badan
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_availability
为 1
时,产品可用,然后 is_available
为 1
并且库存中至少有一种产品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_id
为 2
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粉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;