首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MAX()函数实现等值的附加条件

使用MAX()函数实现等值的附加条件
EN

Stack Overflow用户
提问于 2018-10-21 20:21:51
回答 2查看 63关注 0票数 0

我有一个简单的拍卖数据库。它包括一个包含标书的表格。

代码语言:javascript
复制
+---------+---------+--------+------------+
| item_id | user_id | amount |    time    |
+---------+---------+--------+------------+
|       3 |       2 |    500 | 1540152972 |
|       3 |       4 |    500 | 1540151466 |
+---------+---------+--------+------------+

在拍卖结束时,我需要找出哪些用户赢得了哪些项目(最高金额)。对此,我考虑了以下查询

代码语言:javascript
复制
SELECT item_id, user_id, MAX(amount)
FROM auction_bids
GROUP BY item_id

这似乎很好,直到多个用户以相同的金额出价。

在这种情况下,我需要检索最早的(即:最低的time值)。

如何将此操作到GROUP BY查询中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-21 20:36:51

如果没有具有相同item_id的其他行具有较高的价格,则返回一行;或者,如果价格相同,则另一行将稍后返回。

代码语言:javascript
复制
SELECT item_id, user_id, amount
FROM auction_bids a1
WHERE NOT EXISTS (select 1 from auction_bids a2
                  where a2.item_id = a1.item_id
                    and (a2.amount > a1.amount
                         or (a2.amount = a1.amount and a2.time < a1.time)))
票数 2
EN

Stack Overflow用户

发布于 2018-10-21 20:22:53

不,这是过滤,而不是聚合:

代码语言:javascript
复制
SELECT ab.*
FROM auction_bids ab
WHERE ab.amount = (SELECT MAX(ab2.amount)
                   FROM auction_bids ab2
                   WHERE ab2.item_id = ab.item_id
                  );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52919520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档