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创建与投标相关的新表