1

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

非常感谢!

更新

不幸的是,我的情况发生了变化:

punteggio 从另一个表的 SUM 中诞生:

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

但它不起作用...

谢谢你们!

4

2 回答 2

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

于 2012-12-11T21:29:54.053 回答
1

使用子查询连接来获取DISTINCT3 个最大值的集合punteggio并将其与主表连接以检索具有这些值的所有行。

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

这是 SQLFiddle.com 上的演示

于 2012-12-11T21:27:48.770 回答