4

短的:

从下面的 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 中定义的值。
每件商品都属于一个购物车。
购物车的价值是其购物车中具有最大值的商品的价值。
如何选择购物车 id、max(item-value) 及其对应的 item-id?

例如,购物车 ID A 包含值为 10 的项目 ID X 和值为 90 的项目 ID Y。
使用上面的 sql 选择我得到,

一个,90
我需要的是

一个,是的,90


平台:MS SQL

4

2 回答 2

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
于 2009-03-04T15:20:21.943 回答
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

这就是说:按high_val降序对something ='avalue'的值排序mytable。只抓住第一行,这将为您提供所选范围内的 max(high_val) 和该表的 my_key。

于 2012-08-28T13:28:18.703 回答