我正试图弄清楚MySQL查询

时间:2017-10-10 12:37:01

标签: java mysql sql

如何获得前3条记录,最高得分和价格总和加起来为某个值(前25或低于25)。这是我的表

CREATE TABLE test_1(   id int(11)NOT NULL,   Spiller varchar(45)DEFAULT NULL,   Score double DEFAULT NULL,   Pris double DEFAULT NULL,   主要关键(id) )ENGINE = InnoDB DEFAULT CHARSET = utf8;

INSERT INTO testtest_1idSpillerScorePris)VALUES(1,'a1',7.87 ,11.6); INSERT INTO testtest_1idSpillerScorePris)VALUES(2,'a2',8.32,10.4) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(3,'a3',6.32,11.6) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(4,'a4',4.15,8.5) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(5,'a5',4.5,8.5) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(6,'a6',11.13,12.5) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(7,'a7',8.12,10.4) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(8,'a8',5.21,7.5) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(9,'a9',3.77,7) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(10,'a10',4.38,5.6) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(11,'a11',2.69,5.6) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(12,'a12',4.48,7.4) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(13,'a13',3.47,5.6) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(14,'a14',4.87,6) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(15,'a15',4.6,6.6) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(16,'a16',2.74,6.3) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(17,'a17',5.54,10.4) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(18,'a18',3.86,7.2) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(19,'a19',6.4,5) ; INSERT INTO testtest_1idSpillerScorePris)VALUES(20,'a20',2.94,5.9) ;

我想要这样的结果。提前谢谢:)

Image here

3 个答案:

答案 0 :(得分:2)

我想这样的事情

select r1.spiller, r2.spiller, r3.spiller
from pris r1
join pris r2 on r1.spiller > r2.spiller
join pris r3 on r2.spiller > r3.spiller 
where r1.pris + r2.pris + r3.pris = 25;

可以变成前三名

select r1.spiller, r2.spiller, r3.spiller, r1.pris+r2.pris+r3.pris 
from pris r1
join pris r2 on r1.spiller > r2.spiller -- self-join, use > on the primary key to avoid duplicates
join pris r3 on r2.spiller > r3.spiller 
where r1.pris + r2.pris + r3.pris <= 25
order by r1.pris+r2.pris+r3.pris desc
limit 3; 

设定:

CREATE TABLE pris (
  spiller varchar(3) NOT NULL,
  pris decimal(4,1) DEFAULT NULL
);


insert into 
pris(spiller, pris)
values 
('a1', 11.6), ('a2', 10.4), ('a3', 11.6),
('a4', 8.5), ('a5', 8.5), ('a6', 12.5),
('a7', 8.4), ('a8', 7.5),('a9', 7),
('a10', 7.6), ('a11', 5.6), ('a12', 7.4),
('a13', 5.6), ('a14', 6), ('a15', 6.6),
('a16', 6.3), ('a17', 10.4), ('a18', 7.2),
('a19', 5), ('a20', 5.9);

结果:

+---------+---------+---------+------+
| spiller | spiller | spiller |  sum |
+---------+---------+---------+------+
| a8      | a6      | a19     | 25.0 |
| a8      | a20     | a1      | 25.0 |
| a18     | a17     | a12     | 25.0 |
+---------+---------+---------+------+

答案 1 :(得分:0)

SELECT r1.Spiller, r2.Spiller, r3.Spiller
FROM MyTable as r1, MyTable as r2, MyTable as r3
WHERE r1.Pris+r2.Pris+r3.Pris = 25

答案 2 :(得分:0)

下面的代码是选择3行中具有最高“Pris”

的行
SELECT * FROM tableName ORDER BY Pris DESC LIMIT 3;

编辑:我错误地理解了问题,但要选择最高的“Pris”ed 3行,这可能是你的答案,但这不是你问题的答案