SQL MAX in Spalte einschließlich Primärschlüssel
-
03-07-2019 - |
Frage
Kurz:
Von unten sql select bekomme ich die cart_id und den Wert der maximalen bewerteten Artikel in diesem Warenkorb.
SELECT CartItems.cart_id, MAX(ItemValues.value)
FROM CartItems
INNER JOIN ItemValues
ON CartItems.item_id=ItemValues.item_id
GROUP BY CartItems.cart_id
aber ich brauche auch item_id für das Element (ItemValues.Element-id).
Lange:
Zwei Tische, CartItems, ItemValues (und Ihre jeweiligen Wagen, Elemente, hier irrelevant).
Jeder Wagen kann mehrere Positionen haben während jedes Element hat einen Wert angegeben, der in ItemValues.
Jedes Element gehört zu einem Wagen.
Der Wert eines Wagens den Wert des Elements mit dem maximalen Wert in Ihren Warenkorb.
Wie tun ich wählen Sie Warenkorb-id, max(Element-Wert) und die entsprechenden Element-id?
Zum Beispiel Warenkorb-id enthält Eine Element-id für X mit dem Wert 10 und item-id-Y mit dem Wert 90.
Mit obigem sql auswählen, die ich bekommen,
A, 90Was ich brauche, ist
A, Y, 90
Plattform:MS SQL
Lösung
In MS SQL
und Oracle
:
SELECT *
FROM
(
SELECT ci.*, iv.*,
ROW_NUMBER() OVER (PARTITION BY CartItems.cart_id ORDER BY ItemValues.value DESC)
FROM CartItems ci
INNER JOIN ItemValues iv
ON CartItems.item_id=ItemValues.item_id
) s
WHERE rn = 1
In MySQL
:
SELECT
FROM
(
SELECT ci.*,
(
SELECT id
FROM ItemValues iv
WHERE iv.item_id = ci.item_id
ORDER BY
value DESC
LIMIT 1
) AS maxitem
FROM CartItems ci
) iv, ItemValues ivo
WHERE ivo.id = iv.maxitem
Andere Tipps
Dieser code wurde geschrieben für Oracle sein, sollte aber kompatibel mit den meisten SQL-Versionen:
Dies wird max(high_val) und gibt seinen Schlüssel.
select high_val, my_key
from (select high_val, my_key
from mytable
where something = 'avalue'
order by high_val desc)
where rownum <= 1
Was dies sagt, ist:Sortieren mytable von high_val absteigender für Werte, wo etwas = 'avalue'.Nur greifen die oberste Zeile, die Sie mit dem max(high_val) in der gewählten Bereich und die my_key der Tabelle.