0

私はMicrosoftSQLServerを学ぼうとしており、次の方法を理解しようとしています。

私は2つのテーブルを持っています:

ユーザー

id  fname   lname   username
111 kely    dike    kdike
222 hana    sho     hsho
333 mike    dime    mdime
444 sergi   xan     sxan

email_recipient

id  recipient_id    fname   lname
1      222          hana    sho
2      222          hana    sho
3      222          hana    sho
4      333          mike    dime
5      111          kely    dike
6      111          kely    dike
7      444          sergi   xan
8      444          sergi   xan
9      444          sergi   xan
10     444          sergi   xan

そして、私がやりたいのは、各ユーザーが受信した電子メールの数を数えることです。

id  fname   lname  username email_recipient total
111 kely    dike   kdike          2
222 hana    sho    hsho           3
333 mike    dime   mdime          1
444 sergi   xan    sxan           4

誰かが正しい方向を指してくださいませんか?

4

2 に答える 2

3

これを試すことができます。

SELECT a.id, a.fname, a.lname, a.username, COUNT(*) AS email_recipient_total
FROM users a
INNER JOIN email_recipient b ON b.recipient_id = a.id
GROUP BY a.id, a.fname, a.lname, a.username

結果

| | ID | FNAME | LNAME | ユーザー名 | EMAIL_RECIPIENT_TOTAL |
-------------------------------------------------- --------
| | 111 | ケリー | 堤防 | クディケ| 2 |
| | 222 | ハナ | ハナ | しょう | しょ | 3 |
| | 333 | マイク | ダイム | エムダイム | 1 |
| | 444 | セルジ | ザン | シャン | 4 |

実際に見る

于 2013-01-08T22:04:41.073 に答える
0

私の推測では、これはパフォーマンスがわずかに向上する可能性がありますが、それでも、本質的に同じ答えです。

SELECT 
  a.id, 
  a.fname, 
  a.lname, 
  a.username, 
  b.email_recipient_total
FROM users a
  INNER JOIN (
      select recipient_id, COUNT(*) AS email_recipient_total
      from email_recipient
      group by recipient_id
    ) b ON b.recipient_id = a.id
于 2013-01-08T22:42:49.030 に答える