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

私の「3」の最高点は実際には 7 点中 5 点なので、1 と 4 のように 2 と 7 は同じ点になります...

最小ポイントと最大ポイントは事前にわかりません。

"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

しかし、それは機能しません...

皆さんありがとうございます!

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

サブクエリ結合を使用して、DISTINCTの3つの最大値のセットを取得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 に答える