MYSQL仅当USER作为此ID的最大值时,才选择用户的最大记录

MYSQL仅当USER作为此ID的最大值时,才选择用户的最大记录,mysql,select,sum,max,Mysql,Select,Sum,Max,我有一个表,我需要对其进行查询。 我希望仅当我拥有每个车辆id的最高值时,才能检索每个车辆id上所有最高值的总和。以下是我的表结构和数据: tablename id vehid userid amount 1 1 3 4 2 1 4

我有一个表,我需要对其进行查询。 我希望仅当我拥有每个车辆id的最高值时,才能检索每个车辆id上所有最高值的总和。以下是我的表结构和数据:

tablename
id               vehid             userid            amount
1                  1                  3                4
2                  1                  4                5
3                  1                  5                6
4                  2                  3                5
5                  2                  4                4
6                  3                  5                12
如果我正在查找userid:3的数据,则预期结果为5 如果我正在查找userid:4,则预期结果为0 如果我正在寻找userid:5预期结果18 我不知道从哪里开始

这是我试过的

SELECT SUM(amount) FROM tablename WHERE user_id = 3 AND amount = (SELECT max(amount)     FROM tablename GROUP BY veh_id)  

从tablename中选择SUMamount作为一个WHERE user_id=3,从tablename中选择amount=MAXamount作为一个WHERE b.veh_id=a.veh_id这给了我一个结果,但我不确定我看到的是否正确,我已经显示了我所有数据的列表,我需要这些数据的总和,但现在我看到了包含金额的列表,它们没有加起来。我的坏,我不是返回数组,而是返回结果。因此,只给我一个ID,我认为这是总数。这似乎更容易使工作。剩下的唯一一件事是,如果一个用户输入了相同数量的2倍,它会返回2倍的数据,而不是我只想添加一倍的数据?有可能有不同的MAXamount吗?不,这将很难使它与此代码一起工作。试试草莓的建议。从tablename中选择SUMamount作为a,其中user_id=3,amount=从tablename中选择MAXamount作为b,其中b.veh_id=a.veh_id这给了我一个结果,但我不确定我看到的是否正确,我已经显示了我所有数据的列表,我需要它的总和,但现在我看到清单上有金额,它们没有加起来。我不好,我没有返回数组,而是返回结果。因此,只给我一个ID,我认为这是总数。这似乎更容易使工作。剩下的唯一一件事是,如果一个用户输入了相同数量的2倍,它会返回2倍的数据,而不是我只想添加一倍的数据?有可能有不同的MAXamount吗?不,这将很难使它与此代码一起工作。试试草莓的建议。我不明白,但它没有给我任何结果。你是什么意思,没有返回行?当我将此插入我的网站时,我期待会有结果,但我什么也看不到。试试Sumcolescey。max_amount,0我不明白,但它没有给我任何结果。你是什么意思,没有返回行?当我将其插入我的网站时,我希望得到一个结果,但我什么也看不到。请尝试使用SumCoalescy.max_amount,0
CREATE TABLE tablename
(id               INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,vehid             INT NOT NULL
,userid            INT NOT NULL
,amount INT NOT NULL
);

INSERT INTO tablename VALUES 
(1                  ,1                  ,3                ,4),
(2                  ,1                  ,4                ,5),
(3                  ,1                  ,5                ,6),
(4                  ,2                  ,3                ,5),
(5                  ,2                  ,4                ,4),
(6                  ,3                  ,5                ,12);

SELECT x.userid
     , COALESCE(SUM(y.max_amount),0) amount 
  FROM tablename x 
  LEFT 
  JOIN (SELECT vehid,MAX(amount) max_amount FROM tablename GROUP BY vehid) y 
    ON y.vehid = x.vehid 
   AND y.max_amount = x.amount 
 GROUP 
    BY userid;

+--------+--------+
| userid | amount |
+--------+--------+
|      3 |      5 |
|      4 |      0 |
|      5 |     18 |
+--------+--------+