从下面的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
答案 0 :(得分:4)
在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
答案 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。