Mysql查询语句,查找我多少次是一个清单的最大金额

Mysql查询语句,查找我多少次是一个清单的最大金额,mysql,Mysql,这是我的表格结构 id veh_id user_id amount ... 我还有其他表来关联用户id和车辆id 我想知道用户在每个车辆id上输入了多少次金额,在多少情况下,该金额实际上是收到的最高金额。我想为每个用户提供这2个计数 id, veh_id, user_id, amount 1 1 30 100 2 1 32 105 3 2 30 100 4 2 32

这是我的表格结构

id
veh_id
user_id
amount
...
我还有其他表来关联用户id和车辆id

我想知道用户在每个车辆id上输入了多少次金额,在多少情况下,该金额实际上是收到的最高金额。我想为每个用户提供这2个计数

id, veh_id, user_id, amount
1    1       30        100
2    1       32        105
3    2       30        100
4    2       32        95
5    2       33        90
我希望select语句为我提供:

用户30作为出价2倍,1倍是最高出价者

用户32作为出价2倍和1倍是最高出价者

用户33出价1倍,最高出价者出价0倍

我不知道是否有可能获得这些数字。

这可能很接近,但不确定您是如何将车辆关联在一起的

select
  user_id,
  count(*) as num_bids,
  SUM(is_highest) as max_bids
from ( select
  a.user_id,
  COALESCE((select
      MAX(b.amount) < a.amount
    from bid as b
    where b.id < a.id
    and b.veh_id=a.veh_id
  ), 1) as is_highest
from bid as a
) as c
group by user_id
我的理解是,用户30在一辆车上最多有2次出价和2次首次出价

编辑:如果你只是寻找每辆车最多1个出价,让我知道。这实际上比回头看看谁的出价是最高的要容易得多

EDIT2:每辆车最多只能有1个计数的解决方案:

似乎出于某种原因,这应该更简单:

select
 user_id,
 count(*) as num_bids,
 count(vamt) as num_max
from bid
left join (
  select veh_id as vid, max(amount) as vamt
  from bid
  group by veh_id
) as a on vid = veh_id and vamt <= amount
group by user_id
试试这个

select x.user_id, x.bid_times, COALESCE(y.max_times,0) as max_times from
(select user_id, count(*) as bid_times from testt group by user_id) as x
 LEFT JOIN
(select user_id, count(*) as max_times  from testt a where 0=( select count(*) from testt where amount > a.amount and veh_id=a.veh_id ) group by user_id) as y
ON x.user_id=y.user_id

你肯定会从SO专家那里得到答案。但最好还是显示您迄今为止所做的尝试?id增量是否代表行的添加顺序?ie:1是第一排,2是第二排,依此类推?我这样问是因为金额似乎随着时间的推移而下降而不是上升……是的,Id是递增的。但是一个出价可以比另一个id更大的出价低。是的,我希望每辆车只有一个最高出价。我想在那里添加一个WHERE子句,所以我把WHERE放在GROUPP BY前面,在我的WHERE子句中,我引用了另一个表,所以我把一个左联接表作为e放在WHERE'中,我写了WHERE.cid=3。我原以为会有结果,但没有,我是空出来的。基本上,我想要属于某个经销商的所有车辆。cid使用bid.veh_id=e.id创建与投标相关的新表