Heim > Fragen und Antworten > Hauptteil
Ich habe einen Tisch wie diesen:
tmp_id | Produktverfügbarkeit (0 und 1) | is_available(0 und 1) | stock_count(integer) | product_id (Ganzzahl) |
---|---|---|---|---|
1 | 1 | 1 | 0 | 1 |
2 | 1 | 1 | 4 | 1 |
Ich muss jeweils das erste verfügbare Produkt besorgen product_id
.
Verfügbare Produkte müssen zunächst geprüft werden product_availability
,然后检查is_available
,最后检查stock_count
。 (当 product_availability
为 1
时,产品可用,然后 is_available
为 1
并且库存中至少有一种产品1
. )
Ich möchte zuerst die verfügbaren Produkte anzeigen. Wenn keine Produkte verfügbar sind, spielt es keine Rolle, welches Produkt angezeigt wird (im Falle einer Nichtverfügbarkeit funktioniert auch das erste).
(Im obigen Beispiel muss ich zuerst das Produkt für tmp_id
为 2
besorgen.)
Frage: Meine Frage ist, wie schreibe ich eine MYSQL-Abfrage, um meine Anforderungen zu erfüllen?
Mit dem folgenden Befehl kann ich meine Produkte in der gewünschten Reihenfolge abrufen, weiß aber nicht, was ich als Nächstes tun soll, um das erste vorhandene Produkt mit GROUP BY
zu erhalten:
SELECT pa.* FROM `product_advanced` AS `pa` ORDER BY `pa`.`product_availability` DESC, `pa`.`is_available` DESC, `pa`.`stock_count` DESC
Hinweis: Natürlich ist dies nur eine einfache Demo von dem, was ich habe. Der eigentliche Code ist komplexer und enthält mehrere Verknüpfungen und andere Dinge.
P粉0557261462023-09-13 14:05:48
这可以使用 row_number()
来完成,返回分区内每行的唯一行号
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;