3

私は2つのテーブルlogin_activityevent_details. テーブルの構造は次のとおりです。

Login_activity
activity_id   |  student_id   |  login_date  | event_id

event_details
event_id   |  event_name   |  event_date

と一致するfromevent_idのカウントを取得する必要があります。student_idlogin_activityevent_id

以下のクエリを試しました

select event_id,student_id 
from login_activity 
where login_activity.event_id in (select event_id from event_details);

しかし、個別の event_id とそれらの Student_id の数を取得できません。簡単な解決策が必要であることは知っていますが、それを取得できないようです。私は何が欠けていますか?

4

4 に答える 4

4

GROUP BY と COUNT を使用する必要があります

SELECT l.event_id, count(student_ID)
FROM login_activity l
 INNER JOIN event_details e ON l.event_id = e.event_id
GROUP BY l.event_id

特定の event_name または event_date を取得する場合を除き、実際には event_details テーブルは必要ありません。

SELECT l.event_id, count(student_ID)
FROM login_activity l
GROUP BY l.event_id
于 2013-03-07T21:08:30.127 に答える
2

WHERE 句の後に 'GROUP BY student_id' を使用することをお勧めします。

于 2013-03-07T21:23:28.950 に答える
1

データを結合して必要なものを取得するには、内部結合または左結合のいずれかが必要です。次に、group by を使用して、イベント ID を使用できます。カウントを取得するには、count コマンドを使用できます。たとえば、count(l.student_id) を studentCount として新しいフィールドとして実行できます。

于 2013-03-07T21:18:03.863 に答える
1

結果に event_details テーブルが必要ですか (つまり、クエリでイベントの名前または日付を使用する必要がありますか)? そうでない場合は、login_activity テーブルを使用できます。

    select event_id, count(student_id) as student_count from login_activity group by event_id

ただし、イベントの名前が必要な場合は、ほとんど同じです。

    select e.event_name, count(l.student_id) as student_count
    from event_details e
    left join login_activity l on e.event_id = l.event_id
    group by e.event_name

上記の左結合の利点は、該当する場合、まだログイン アクティビティがないイベントの結果を取得できることです。また、必要に応じて event_name を event_id または日付に置き換えることができます。

于 2013-03-07T21:12:32.120 に答える