如果最后3个相等,MySQL Query限制3个或更多?

时间:2012-12-11 21:23:38

标签: mysql

我需要将结果限制为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

但它不起作用......

谢谢大家!

2 个答案:

答案 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

Here's a demo on SQLFiddle.com

答案 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()子句中子查询的限制。