5

概要

開催中の大会に関するデータがたくさんあるので、より良い形式で提示したいと考えています。

4 つのテーブルがあります。最初の 2 つは一目瞭然です。テーブルpointsextrasテーブルは本質的にまったく同じものです。それらは、列名がわずかに異なる別のテーブルに格納されているだけです。

データ

    ユーザー
    +----+---------------+------+
    | | ID | 名前 | チーム |
    +----+---------------+------+
    | | 1 | ジョン・ドウ | 1 |
    | | 2 | ジェーン・レーン | 1 |
    | | 3 | ジャック・ブラック | 4 |
    | | 4 | ダンバム | 3 |
    | | 5 | パム・ジャン | 2 |
    | | 6 | ポップタルト | 2 |
    | | 7 | ジョン・Q | 1 |
    | | 8 | ヒューゴ・ストレンジ | 3 |
    | | 9 | ジミー・ニュートロン | 2 |
    +----+---------------+------+
    チーム
    +----+-----------------+
    | | ID | 名前 |
    +----+-----------------+
    | | 1 | チームの楽しみ |
    | | 2 | ドリームチーム |
    | | 3 | 勝つためにそれで |
    | | 4 | 仲間 |
    +----+-----------------+
    ポイント
    +---------+--------+------------+
    | | ユーザー ID | ポイント | イベント |
    +---------+--------+------------+
    | | 1 | 2 | バスケットボール | バスケットボール
    | | 2 | 4 | バスケットボール | バスケットボール
    | | 5 | 1 | バスケットボール | バスケットボール
    | | 8 | 3 | バスケットボール | バスケットボール
    | | 9 | 5 | バスケットボール | バスケットボール
    | | 2 | 8 | バレーボール |
    | | 5 | 5.5 | バレーボール |
    | | 6 | 6.5 | バレーボール |
    | | 7 | 2 | バレーボール |
    | | 8 | 4 | バレーボール |
    | | 9 | 9.5 | バレーボール |
    | | 1 | 2.5 | ドッジボール | ドッジボール
    | | 3 | 3 | ドッジボール | ドッジボール
    | | 4 | 4 | ドッジボール | ドッジボール
    | | 6 | 9 | ドッジボール | ドッジボール
    | | 7 | 2.5 | ドッジボール | ドッジボール
    | | 9 | 3 | ドッジボール | ドッジボール
    +---------+--------+------------+
    エクストラ
    +---------+--------+---------------------+
    | | ユーザー ID | ポイント | 説明 |
    +---------+--------+---------------------+
    | | 1 | 5 | 素晴らしいスポーツマンシップ |
    | | 3 | 10 | チームプレーヤー |
    | | 8 | 5.5 | 最も改善された |
    +---------+--------+---------------------+

私がやろうとしていること

特定のチームが参加したすべてのイベント (および「エクストラ」)、チームのすべてのメンバーからの合計ポイント、およびそのイベントの参加メンバーを返すクエリを作成したいと考えています。

以下の例では、Team Fun (チーム 1) を使用しています。

+---------------------+--------+--------------------+------------+
|        event        | points |      members       | members_id |
+---------------------+--------+--------------------+------------+
| Basketball          |      6 | John Doe,Jane Lane | 1,2        |
| Volleyball          |     10 | Jane Lane,John Q   | 2,7        |
| Dodgeball           |      5 | John Doe,John Q    | 1,7        |
| Great Sportsmanship |      5 | John Doe           | 1          |
+---------------------+--------+--------------------+------------+

誰かがこれを理解するのを手伝ってくれるなら、私はそれを感謝します!

SQLフィドル

これは、上記のデータ スキーマを持つ SQLFiddle です - http://sqlfiddle.com/#!2/e8f97a

4

1 に答える 1

1

a を使用しUNIONて、エクストラとポイントをまとめることができます。

SELECT user_id, points, event
FROM points
UNION ALL
SELECT user_id, points, description AS event
FROM extras

SUM次に、これを使用して、情報をいくつかのGROUP_CONCATsでコンパイルできます。

SELECT P.event, SUM(P.points) AS points, 
    GROUP_CONCAT(U.name) AS members, GROUP_CONCAT(U.id) AS members_id
FROM teams T
INNER JOIN users U ON T.id = U.team
INNER JOIN
(
    SELECT user_id, points, event
    FROM points
    UNION ALL
    SELECT user_id, points, description AS event
    FROM extras
) P ON U.id = P.user_id
WHERE T.id = @teamId
GROUP BY P.event

SQL フィドルの例

于 2013-10-03T16:17:16.637 に答える