短:

从下面的sql中选择我得到的cart_id和该购物车中最大值项的值。

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

但我也需要item_id作为该项目(ItemValues.item-id)。

长:

两个表,CartItems,ItemValues(以及它们各自的Carts,Items,这里不相关)。
每个购物车可以有几个项目,每个项目都有一个在ItemValues中定义的值 每个项目属于一个购物车。
购物车的价值是购物车中具有最大价值的商品的价值 如何选择cart-id,max(item-value)及其对应的item-id?

例如,cart-id A包含值为10的item-id X和值为90的item-id Y. 用上面的sql select我得到,

A, 90
我需要的是

A, Y, 90

,点击 平台:MS SQL

有帮助吗?

解决方案

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

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

其他提示

此代码是为Oracle编写的,但应与大多数SQL版本兼容:

这将获得max(high_val)并返回其键。

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

这就是说:对于某些值='avalue'的值,以high_val降序排序mytable。只抓住顶行,它将为您提供所选范围内的max(high_val)和该表的my_key。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top