2

この質問がここや他の場所で尋ねられ、回答されているのを見てきましたが、それでも私が望む結果を得ることができません. では、重複はご容赦ください。

プレーヤー (プレーヤーの 2 つの列) がゲームに勝った回数を示すテーブルを返したいと考えています (place という名前の列に 1 が含まれています)。

私のクエリは次のとおりです。

SELECT `player1` as Winner, Count( * ) AS Count
FROM scores
WHERE `place` =1
UNION ALL
SELECT `player2` as Winner, Count( * ) AS Count
FROM scores
WHERE `place` =1
ORDER  BY count DESC  

テーブル構造は次のとおりです。

player1 varchar
player2 varchar
place   smallint
Other unrelated columns

次のような応答が必要です。

Winner     Count
Joe          5
Sam          4
Bill         3

結果を取得して Web ページに表示するので、列ラベルは重要ではありません。

phpadmin はクエリでエラーを報告しますが、Instant SQLformatter ( http://www.dpriver.com/pp/sqlformat.htm?ref=g_wangz ) はクエリは問題ないと言っているようです (エラーを表示するのではなくクエリをフォーマットします)。

それで、私は何を間違っていますか?

4

2 に答える 2

0

クエリを次のように少し変更します。このクエリは、列を複数の行を持つ単一の列に変換player1player2、カウントを適用できます。

select Winner,
  count(*) Total
from
(
  SELECT `player1` as Winner
  FROM scores
  WHERE `place` =1
  UNION ALL
  SELECT `player2` as Winner
  FROM scores
  WHERE `place` =1
) src
group by winner
order by total desc;

デモで SQL Fiddle を参照してください

于 2013-05-01T11:48:40.433 に答える
0

プレイヤー名を使用して、簡単UNION ALLに結果を計算できます。GROUP BY

SELECT Name AS Winner, COUNT(Name) AS Count
FROM (
  SELECT player1 AS Name FROM Scores WHERE place=1
  UNION ALL
  SELECT player2 AS Name FROM Scores WHERE place=1
) a
GROUP BY Name
ORDER BY Count DESC;

でテストする SQLFiddle

于 2013-05-01T11:49:12.673 に答える