Domanda

Breve:

Da sotto sql selezionare Ottengo cart_id e il valore dell'articolo massimo stimato in quel carrello.

SELECT CartItems.cart_id, MAX(ItemValues.value)
FROM CartItems 
INNER JOIN ItemValues 
ON CartItems.item_id=ItemValues.item_id
GROUP BY CartItems.cart_id

ma ho anche bisogno di item_id per quell'articolo (ItemValues.item-id).

Long:

Due tabelle, CartItems, ItemValues ??(e i rispettivi Carrelli, Articoli, qui non pertinenti).
Ogni carrello può avere diversi articoli in cui ogni articolo ha un valore definito in ItemValues.
Ogni articolo appartiene a un carrello.
Il valore di un carrello è il valore dell'articolo con il valore massimo all'interno del carrello.
Come faccio a selezionare id-carrello, max (valore-articolo) e il suo ID-articolo corrispondente?

Ad esempio cart-id A contiene l'id-elemento X con valore 10 e l'id-elemento Y con valore 90.
Con sql sopra selezionare Ottengo,

A, 90
Quello di cui ho bisogno è

A, Y, 90


piattaforma: MS SQL

È stato utile?

Soluzione

In MS SQL e 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

Altri suggerimenti

Questo codice è stato scritto per Oracle, ma dovrebbe essere compatibile con la maggior parte delle versioni SQL:

Questo ottiene il massimo (high_val) e restituisce la sua chiave.

select high_val, my_key
from (select high_val, my_key
      from mytable
      where something = 'avalue'
      order by high_val desc)
where rownum <= 1

Ciò che dice è: ordina mytable per high_val decrescente per valori in cui qualcosa = 'valanga'. Prendi solo la riga superiore, che ti fornirà il massimo (valore_alta) nell'intervallo selezionato e il_chiave_di quella tabella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top