Question

Court:

Ci-dessous, sql select, j'obtiens le identifiant_cartier et la valeur de l'élément à valeur maximale dans ce panier.

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

mais j'ai aussi besoin de item_id pour cet élément (ItemValues.item-id).

Long:

Deux tables, CartItems, ItemValues ??(et leurs paniers, éléments, non pertinents ici).
Chaque panier peut avoir plusieurs éléments, chaque élément ayant une valeur définie dans ItemValues.
Chaque article appartient à un panier.
La valeur d'un panier est la valeur de l'article avec une valeur maximale dans son panier.
Comment sélectionner cart-id, max (item-value) et son item correspondant?

Par exemple, cart-id A contient l'ID d'article X avec la valeur 10 et l'ID d'article Y avec la valeur 90.
Avec ci-dessus sql sélectionnez je reçois,

A, 90
Ce dont j'ai besoin, c'est

A, Y, 90


plate-forme: MS SQL

Était-ce utile?

La solution

Dans MS SQL et 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

Dans 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

Autres conseils

Ce code a été écrit pour Oracle, mais devrait être compatible avec la plupart des versions SQL:

Ceci obtient le max (high_val) et retourne sa clé.

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

Ceci dit: Triez mytable par high_val décroissant pour des valeurs où quelque chose = 'valeur'. Saisissez uniquement la ligne du haut, ce qui vous fournira le max (high_val) de la plage sélectionnée et la my_key de cette table.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top