2017-02-20 48 views
0

を使用せずに、私は次の表を持っている:私は注文、サブクエリ(MySQLの)

+-----------+--------+------+--------+----------+----------+---------+-------+ 
| player_id | europe | asia | africa | namerica | lamerica | oceania | total | 
+-----------+--------+------+--------+----------+----------+---------+-------+ 
| 121693 | 1076 | 70 | NULL | NULL  | NULL  | NULL | 1146 | 
| 118840 |  40 | 490 | NULL | NULL  | NULL  | NULL | 530 | 
| 121691 |  96 | 0 | NULL | NULL  | NULL  | NULL | 96 | 
+-----------+--------+------+--------+----------+----------+---------+-------+ 

+-----------+--------+------+--------+----------+----------+---------+-------+ 
| player_id | europe | asia | africa | namerica | lamerica | oceania | total | 
+-----------+--------+------+--------+----------+----------+---------+-------+ 
| 121693 | 1076 | 70 | NULL | NULL  | NULL  | NULL | 1146 | 
| 121693 | 416 | 70 | NULL | NULL  | NULL  | NULL | 486 | 
| 121693 |  40 | NULL | NULL | NULL  | NULL  | NULL | 40 | 
| 118840 |  40 | NULL | NULL | NULL  | NULL  | NULL | 40 | 
| 121693 |  40 | 70 | NULL | NULL  | NULL  | NULL | 110 | 
| 118840 |  40 | 490 | NULL | NULL  | NULL  | NULL | 530 | 
| 121691 |  96 | 0 | NULL | NULL  | NULL  | NULL | 96 | 
| 121693 | 136 | 70 | NULL | NULL  | NULL  | NULL | 206 | 
| 118840 |  40 | NULL | NULL | NULL  | NULL  | NULL | 40 | 
| 121691 |  96 | NULL | NULL | NULL  | NULL  | NULL | 96 | 
+-----------+--------+------+--------+----------+----------+---------+-------+ 

私は何を取得したいと思いことのようなものです以下のことを試しましたが、結果は私が必要とするものではありません。

SELECT player_id, europe, asia, africa, namerica, 
       lamerica, oceania, MAX(total) AS total 
FROM tbl 
WHERE total IS NOT NULL 
GROUP BY player_id 
ORDER BY total DESC 

これは結果

+-----------+--------+------+--------+----------+----------+---------+-------+ 
| player_id | europe | asia | africa | namerica | lamerica | oceania | total | 
+-----------+--------+------+--------+----------+----------+---------+-------+ 
| 121693 | 1076 | 70 | NULL | NULL  | NULL  | NULL | 1146 | 
| 118840 |  40 |  | NULL | NULL  | NULL  | NULL | 530 | 
| 121691 |  96 | 0 | NULL | NULL  | NULL  | NULL |  96 | 
+-----------+--------+------+--------+----------+----------+---------+-------+ 

私はMySQLのビューを使用していますのでご注意くださいです。 はありませんサブクエリを許可します。

編集:

前の提案に基づいて、私はこれ試してみました:

SELECT a.player_id, a.europe, a.asia, a.africa, a.lamerica, a.namerica, a.oceania, a.total 
FROM tbl AS a 
INNER JOIN (
    SELECT player_id, MAX(total) AS total 
    FROM tbl 
    GROUP BY player_id) b 
ON a.player_id = b.player_id AND a.total = b.total 

をしかし、私はこれらの結果を得る:

+-----------+--------+------+--------+----------+----------+---------+-------+ 
| player_id | europe | asia | africa | lamerica | namerica | oceania | total | 
+-----------+--------+------+--------+----------+----------+---------+-------+ 
| 121693 | 1076 | 70 | NULL | NULL  | NULL  | NULL | 1146 | 
| 118840 |  40 | 490 | NULL | NULL  | NULL  | NULL | 530 | 
| 121691 |  96 | NULL | NULL | NULL  | NULL  | NULL | 96 | 
| 121691 |  96 | 0 | NULL | NULL  | NULL  | NULL | 96 | 
+-----------+--------+------+--------+----------+----------+---------+-------+ 

またネクタイを返します。 どうすればこの問題を回避できますか?

+0

「合計AS合計」が必要だと思ったのはなぜですか? – RiggsFolly

+0

申し訳ありません。編集しました。 MAX(合計)を合計として使用します。 – dimoss

+0

@Barmar:質問を編集しました。私は他の同様の質問で投稿されたソリューションを試みたが、私はそれを働かせることができなかった。どんな助け?ありがとう! – dimoss

答えて

0

は、クエリに別のGROUP BY a.player_idを追加します。

SELECT a.player_id, a.europe, a.asia, a.africa, a.lamerica, a.namerica, a.oceania, a.total 
FROM tbl AS a 
INNER JOIN (
    SELECT player_id, MAX(total) AS total 
    FROM tbl 
    GROUP BY player_id) b 
ON a.player_id = b.player_id AND a.total = b.total 
GROUP BY a.player_id 

これは、タイでの行から任意に他の列の内容を選択します。

ONLY_FULL_GROUP_BY SQLモードが有効になっている場合(デフォルトではMySQL 5.7から起動しています)、ANY_VALUEを使用してこれがOKであることを示す必要があります。

SELECT a.player_id, ANY_VALUE(a.europe), ANY_VALUE(a.asia), ANY_VALUE(a.africa), ANY_VALUE(a.lamerica), ANY_VALUE(a.namerica), ANY_VALUE(a.oceania), ANY_VALUE(a.total)