2013-07-29 44 views
1

這是我的tabel結構。Mysql查詢語句查找我有多少次上市的最高金額

id 
veh_id 
user_id 
amount 
... 

我還有其他的表格來關聯user_id和veh_id。

我想知道用戶在每個veh_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次是higest投標人

用戶32中標2時ANS 1周時間的投標人higest

用戶33出價1周時間和0時間的最高出價者

我不知道是否有可能得到這些數字。

+0

肯定你會從SO專家那裏獲得答案。但是迄今爲止最好展示你嘗試過的東西? – vels4j

+0

id增量是否代表添加行的順序? (即:1是第一行,2是第二行等等?我問,因爲數量似乎沒有隨着時間的推移而下降......) – 2013-07-29 18:00:58

+0

是的,Id是遞增的。但可以降低另一個id更大的出價。 – maphaneuf

回答

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 
+1

是的,我正在尋找每輛車最多隻有1次出價。 – maphaneuf

+0

我想在那裏添加一個WHERE子句,所以我把WHERE放在GROUPP BY的前面,並且在我的WHERE子句中,我引用了另一個表,所以我把一個LEFT JOIN TABLE作爲e並放在WHERE'我寫WHERE e.cid = 3。我期待着一個結果,但不,我空出來了。基本上,我想要所有屬於某個經銷商的車輛(e.cid) – maphaneuf

+0

新表格與出價有關bid.veh_id = e.id – maphaneuf

0

試試這個,

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 
+0

這可能比我的工作更好在有兩次最高出價的情況下 – 2013-07-29 20:51:03