0

私はSQLに非常に慣れていません.要約情報の生成に助けが必要です

メンバーテーブル

MonthID  | UserID  | TeamID
-----------------------------
  1      |  1       | 1
  1      |  2       | 1
  1      |  3       | 1
  1      |  4       | 1
  1      |  5       | 2
  1      |  6       | 2
  1      |  7       | 2
  

レポートテーブル

ID* |  MonthID  | UserID  | IsSend
-----------------------------------
 1  |    1      |    2     | False
 2  |    1      |    3     | True
 3  |    1      |    5     | True

次のようなサマリを生成したい

TeamID     |  Total Count  |  Send Count | Not Send Count
-----------------------------------------------------------
 1         |      4        |      1      |     3
 2         |      3        |      1      |     2

合計数 : チーム内のユーザー数

送信数 : IsSend = True のチーム内の合計ユーザー

送信しない回数: 合計回数 - 送信回数

効率的な方法は何ですか?

4

3 に答える 3

1

これを試してください:

select mt.teamId, count(*) totalCount,
    count(case when rt.isSend = 'True' then 1 end) sendCount,
    count(case when rt.isSend != 'True' then 1 end) notSendCount
from memberTable mt
join reportTable rt on mt.userId = rt.userId
group by mt.teamId

期待される結果はデー​​タを反映していないことに注意してください。データに基づく結果は次のようになります。

+--------+------------+-----------+--------------+
| | チームID | TOTALCOUNT | SENDCOUNT | NOTSENDCOUNT |
+--------+------------+-----------+--------------+
| | 1 | 2 | 1 | 1 |
| | 2 | 1 | 1 | 0 |
+--------+------------+-----------+--------------+
于 2012-04-10T06:02:32.177 に答える
0
select MT.TeamID,
       count(distinct MT.UserID) as "Total Count",
       count(distinct case when RT.IsSend = 1 then MT.UserID end) as "Send Count",
       count(distinct MT.UserID) - count(distinct case when RT.IsSend = 1 then MT.UserID end) as "Not Send Count"
from MemberTable as MT
  left outer join ReportTable as RT
    on MT.MonthID = RT.MonthID and
       MT.UserID = RT.UserID
group by MT.TeamID

結果:

TeamID      Total Count Send Count  Not Send Count
----------- ----------- ----------- --------------
1           4           1           3
2           3           1           2

ここで試してください:https ://data.stackexchange.com/stackoverflow/query/66347

于 2012-04-10T06:16:47.133 に答える
0

これを試すためのテーブルがなければ、これが機能することを確認できませんが、これでほとんどの方法が得られるはずです。

SELECT TeamID, count(userID) as "Total count", Sum(IsSend) as "Send Count" FROM MemberTable JOIN ReportTable ON UserID GROUP BY TeamID; 
于 2012-04-10T06:06:18.210 に答える