1

我有 1 个表,我需要对其进行查询。
仅当我具有该 veh_id 的最高值时,我才希望检索我在每个 veh_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)  
4

1 回答 1

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

http://www.sqlfiddle.com/#!2/6f2cd/1

于 2013-06-06T15:49:01.190 回答