0

データのグループに 1 つ以上の失敗があるすべてのインスタンスを数えようとしています。

また、この質問を作成するのが非常に難しいと感じているので、例を示すことで、私が達成しようとしていることを説明するのに役立つことを願っています.

サンプルデータ:

INSERT INTO test.answers (id, result_id, fail_all, fail_group) VALUES
    (1,1,0,1),  (2,1,0,1),  (3,1,0,1),  (4,1,0,0),
    (5,2,1,0),  (6,2,0,0),  (7,2,1,0),  (8,2,1,0),  (9,2,1,0),
    (10,3,0,1), (11,3,1,1), (12,3,0,1), (13,3,0,1), (14,3,0,1),
    (15,4,0,0), (16,4,0,0), (17,4,0,1), (18,4,0,1), (19,4,0,0), (20,4,0,1),
    (21,5,1,0), (22,5,0,1), (23,5,1,1), (24,5,0,1), (25,5,1,0), (26,5,0,1);

INSERT INTO test.results (id,team_id) VALUES
    (1,1), (2,1), (3,1), (4,2), (5,2);

次に、次のクエリを実行します。

SELECT
    COUNT(IF(a.fail_all = 1,1,NULL)) AS count_fail_all,
    COUNT(IF(a.fail_group = 1,1,NULL)) AS count_fail_group,
    a.result_id
FROM test.answers AS a
GROUP BY a.result_id

結果:

count_fail_all, count_fail_group, result_id
0, 3, 1
4, 0, 2
1, 5, 3
0, 3, 4
3, 4, 5

team_id でグループ化し、結果ごとに失敗した回数をカウントするクエリを作成する必要があります。結果に複数の不合格がある場合、その全体的な結果は不合格です。したがって、上記のクエリの結果の数が 3 (例: 最初の結果) の場合は、1 つとしてカウントする必要があります。fail_all と同じ解決策が fail_group でも機能すると考えられるため、fail_group は今のところ無視できます。

私が望む結果は次のとおりです。

team_id, amount_of_fails, amount_of_fails_per_group
1, 2, 2
2, 1, 2

誰かが必要なクエリの作成を手伝ってくれることを願っていますか? どうやって始めればいいのかさえわかりません。あまりよく聞かれていないことがわかっているので、クエリを調整するためにできることがあれば教えてください。

ありがとう!

4

1 に答える 1

1

その出力が必要な場合。多分このようなもの:

SELECT
  r.team_id,
  SUM(IF(a.fail_all = 1,1,0)) AS amount_fail_all,
  SUM(IF(a.fail_group = 1,1,0)) AS amount_fail_group
 FROM answers AS a
 JOIN results AS r on r.id=a.result_id
 GROUP BY r.team_id

これにより、次の出力が得られます。

team_id  amount_fail_all  amount_fail_group
1        2                2
2        1                2
于 2012-04-04T12:07:36.177 に答える