当前位置: 首页 > 面试题库 >

具有内部联接的SQL max()

高德水
2023-03-14
问题内容

我正在创建一个拍卖网站。人们可以在这里寻找物品并在其上下注。我希望在用户帐户区域中有一个列表,显示用户对其进行出价的所有项目。

当然,每个项目可以有多个来自不同用户的赌注,因此我只希望显示最高金额的项目。这样一来,用户就可以关注其出价所在的所有项目,并可以跟踪他是否仍然是出价最高的项目。

这是我的数据库的样子:

Tabel item                      Tabel itembid                          Tabel user
+=========================+     +================================+     +==============+
|id | title | description |     |id | item_id | user_id | amount |     |id | username |
+=========================+     +================================+     +==============+
| 1 | item1 | ........... |1   *| 1 |    1    |    2    |   10   |*   1| 1 |    me    |
| 2 | item2 | ........... |-----| 2 |    1    |    1    |   15   |-----| 2 |  myself  |
| 3 | item3 | ........... |     | 3 |    2    |    3    |   5    |     | 3 |    I     |
+=========================+     | 4 |    2    |    1    |   10   |     +==============+
                                +================================+

因此,如上所示,我有3个表(item,itembid和user)。如您所见,用户“我”设置了2个出价,一次在项目1上,一次在项目2上。事实证明,他目前也是这两个项目上出价最高的人。

现在,用户“我自己”对项目1出价,而“我”对项目2出价。但是,它们不再是出价最高的用户(用户“我”是)。现在,我需要一条SQL语句,该语句为我提供信息列表(标题,描述,金额,用户名),该信息列表是我曾经出价的所有项目的列表。如果我当前是该项目的最高出价者,则需要查看该项目的标题和说明以及我下注的金额和用户名。现在,如果我不是出价最高的用户,我仍然想查看该项目的信息,但现在要显示出价最高的用户的数量和用户名。

举个例子,从用户“我”的角度来看,我想看看:

> item1, 15, me
> item2, 10, me

现在,对于用户“我自己”,我希望看到:

> item1, 15, me

(由于“我”曾经为item1出价,但不再是出价最高的用户,因此用户“我”就是)

这是我到目前为止所拥有的,但是运行起来并不安静…

SELECT i.title, i.description, ib.amount, u.username
FROM item i
INNER JOIN itembid ib ON i.id = ib.item_id
INNER JOIN user u ON ib.user_id = u.id
WHERE ib.amount = (SELECT max(amount) FROM itembid ib2 WHERE ib2.id = ib.id)
AND ib.user_id = 1

问题答案:

这里是:

SELECT i.title, bmax.amount, u.username
FROM itembid AS b
JOIN (SELECT item_id, MAX(amount) AS amount
      FROM itembid
      GROUP BY item_id) AS bmax
    ON b.item_id = bmax.item_id AND b.amount = bmax.amount
JOIN item AS i ON i.id = b.item_id
JOIN itembid AS ubid ON ubid.item_id = i.item_id
JOIN user AS u ON u.id = b.user_id
WHERE ubid.user_id = :current_user


 类似资料:
  • 问题内容: 所以我有四个桌子。每个表都有一个与前一个表ID相同的ID。因此,我的点击表中有一个ID和一个广告来源的ID。在广告表中,它有一个广告ID和一个来自其广告系列的ID。所以这是一个例子。 因此,要找出表4中的值从何而来,我需要遍历每个表并检查它们具有哪个ID。基本上,我想知道表1中的哪些值与表4中的值相关联。 表4中的内容是网站的访问者,表1中的内容是互联网广告。我想知道哪些访客来自哪些广

  • 问题内容: 我有一个table(),其中2个column(和)是id。这些对应名称的名称在带有列的另一个表()中。 假设我只是在使用,那么简单的内部联接就可以解决我在获取名称时遇到的问题。 如 但是,如果我希望该名称也要解析为什么?“内部连接”会将其解析为? 我知道以上查询是错误的。我可以得到那些对应于两个第和用? -初学者 问题答案: 我建议始终为表和列添加别名。因此,您将确定选择了哪些数据。

  • 我有两张桌子如下 表1是父表,表2是子表。 如何在Oracle11g中创建连接来实现这一点。我使用sql navigator+

  • 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我尝试用多种方法构建工作选择查询,但仍然不起作用。 也许实体有问题?

  • 问题内容: 我有以下查询。它工作正常,但我需要从另一个名为FB的表中提取BUserName,该表具有与FU表中的UserID相关的UserID字段。这可能吗? 只是为了澄清。我在FB表中没有UserName列。它确实有FB.UserID,它与FF.UserID有关系,这是我要从中提取第二个UserName的地方。因此,通过这种关系,我试图从与FB表中的userID相关的FF.UserID表中拉出用

  • 我需要从中选择所有行,如果选择位置子句匹配,则从中选择匹配这是我的外部与子查询,但它失败了。有人可以帮忙吗?