我需要将结果限制为3行(示例),但如果第3个结果等于4,则打印也是第4个,依此类推。 解释:从这张表中
id punteggio
1 100
2 200
3 70
4 100
5 54
6 201
7 200
如果我这样做
SELECT * FROM table ORDER BY punteggio DESC LIMIT 3
我需要在每种情况下打印以下情况:
id punteggio
6 201
2 200
7 200
1 100
4 100
因为我的“三个”最佳分数实际上是7个中的5个,因此原因2和7具有相同的分数,如1和4 ...
我不知道提前分和最高分,否则我会做
"WHERE punteggio >= 100"
非常感谢!
更新
不幸的是我的情况发生了变化:
来自另一张桌子的SUM出生的punteggio:
id idPersona punteggio
1 1 30
2 1 -10
3 2 50
4 3 60
5 2 -10
6 3 150
7 1 190
依旧......
我尝试过:
SELECT persone.nome,
SUM(transazioni.importoFinale) AS punti
FROM transazioni
INNER JOIN persone ON persone.idPersona = transazioni.idPersona
INNER JOIN
(SELECT DISTINCT(SUM(transazioni.importoFinale)) AS punti,
persone.nome
FROM transazioni
INNER JOIN persone on persone.idPersona = transazioni.idPersona
GROUP BY persone.idPersona
ORDER BY punti DESC
LIMIT 3) subq ON transazioni.punti = subq.punti
ORDER BY punti DESC
但它不起作用......
谢谢大家!
答案 0 :(得分:1)
使用子查询联接为DISTINCT
获取punteggio
一组3个最大值,并将其连接到主表以检索具有这些值的所有行。
SELECT
id,
punteggio
FROM
yourtable
/* subquery gets the top 3 values only */
/* and the INNER JOIN matches it to all rows in the main table having those values */
INNER JOIN (
SELECT DISTINCT punteggio as p
FROM yourtable
ORDER BY punteggio DESC
LIMIT 3
) subq ON yourtable.punteggio = subq.p
ORDER BY punteggio DESC
答案 1 :(得分:1)
SELECT id, punteggio
FROM yourtable
WHERE punteggio IN (
SELECT * FROM (
SELECT DISTINCT punteggio
FROM yourtable
ORDER BY punteggio DESC
LIMIT 3
) AS temp
);
请注意,select *
用于解决mysql不支持IN()
子句中子查询的限制。