-2

GROUP BY確かに、ここでこの質問を数回見たことがありますが、すべての回答は aまたは aを使用して問題を解決しているように見えるためWHERE、クエリが大きくなりすぎた場合にこれを回避する方法に興味がありました。動作しません。

たとえば、メイン テーブルに 2 つの左結合を使用するものを作成して、結果にオーバーラップをもたらします。私はまだSQLに比較的慣れていないので、何が原因なのか正確にはわかりませんが、カウントを実行すると、さらに1000人ほどの人が増えていることはわかっています。私が参加している 2 つのテーブルには、(意図的に) 各人の ID が重複しているため、これが当てはまると想像しています。

このプロジェクトで取得したい結果を入力するすべてのクエリは、列を使用しているCOUNT()SUM()保留中です。DISTINCT一度に 1 つの列だけを作成して ID を 1 つとして扱う方法はありますか? これまでに行ったことに基づいて、設定するたびにDISTINCT、属性を設定しようとしている 1 つの列だけを超えて機能することに気付きました。助言がありますか?とてもありがたいです!

重複した ID を含むこれまでのコードの例を次に示します。

SELECT
     targeted.person AS "Person",
     targeted.work AS "Occu",
     (COUNT(targeted.id)) AS "Targeted",
     (COALESCE(SUM(targeted.signed="Yes"),0)) AS "Signed",
     (COALESCE(SUM(targeted.signed="Yes"),0))/COUNT(targeted.id)*100 AS "Signed %",
     (COALESCE(COUNT(question.questionid="96766"),0)) AS "Donated",
     (COALESCE(COUNT(question.questionid="96766"),0))/(COALESCE(SUM(targeted.signed="Yes"),0))*100 AS "Donated %",
     (COALESCE(SUM(question.surveyresponsename),0)) AS "Donation $",
     ROUND((COALESCE(SUM(question.surveyresponsename),0))/(COALESCE(COUNT(question.questionid="96766"),0)),2) AS "Avg Donation",
     (CASE WHEN (left(targeted.datesigned,1)="5" AND right(question.datecontacted,2)="13") THEN (COALESCE(SUM(targeted.signed="Yes"),0)) ELSE 0 END) AS "Signed This Month",
     (CASE WHEN (left(question.datecontacted,1)="5" AND right(question.datecontacted,2)="13") THEN (COALESCE(COUNT(question.questionid="96766"),0)) ELSE 0 END) AS "Donated This Month",
     (CASE WHEN question.ContactType="House Visit" THEN COUNT(question.id) ELSE 0 END) AS "At Home",
     (CASE WHEN question.ContactType="Worksite" THEN COUNT(question.id) ELSE 0 END) AS "At Work",
     (CASE WHEN (left(events.day,1)="5" AND right(events.day,2)="13") THEN COUNT(events.id) ELSE 0 END) AS "Events This Month"
      FROM targeted
       LEFT JOIN question ON targeted.id=question.id
       LEFT JOIN events ON targeted.id=events.id
      GROUP BY targeted.person, targeted.work;

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

対象:

Field       Type            Null    Key     Default
ID          bigint(11)      YES     Primary NO
Work        varchar(255)    YES             NULL
Person      varchar(255)    YES             NULL
Signed      varchar(255)    YES             NULL
DateSigned  varchar(255)    YES             NULL

質問:

Field               Type            Null    Key     Default
ID                  bigint(11)      YES     Primary NO
QuestionID          int(11)         YES             NULL
SurveyResponseId    int(11)         YES             NULL
SurveyResponseName  varchar(255)    YES             NULL
DateContacted       varchar(255)    YES             NULL
ContactType         varchar(255)    YES             NULL

イベント:

Field       Type            Null    Key     Default
ID          bigint(11)      NO      Primary NO
Day         varchar(255)    YES             NULL
EventType   varchar(255)    YES             NULL

結果は次のようになります。

Person  Occu    Targeted    Signed  Signed % ...
1       Job 1   1413        765     54.14 ...
2       Job 2   111         80      72.072 ...
2       Job 3   931         715     76.7991 ...
3       Job 4   2720        1435    52.7573 ...
4       Job 5   401         218     54.364 ...

助けてくれてありがとう!

4

1 に答える 1