列的SQL MAX包括其主键

时间:2009-03-04 15:16:36

标签: sql sql-server tsql max

短:

从下面的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选择我得到,

A, 90
我需要的是

A, Y, 90


平台:MS SQL

2 个答案:

答案 0 :(得分:4)

MS SQLOracle

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

答案 1 :(得分:1)

此代码是为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。