MYSQL仅当USER作为此ID的最大值时,才选择用户的最大记录
我有一个表,我需要对其进行查询。 我希望仅当我拥有每个车辆id的最高值时,才能检索每个车辆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
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 |
+--------+--------+