需要加入并总结sql表

时间:2013-01-08 22:00:49

标签: sql sql-server join count sum

我正在尝试学习Microsoft SQL Server,并且我试图弄清楚如何执行以下操作。

我有两张桌子:

用户

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

有人可以指出正确的方向吗?

2 个答案:

答案 0 :(得分: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 | USERNAME | EMAIL_RECIPIENT_TOTAL |
----------------------------------------------------------
| 111 |  kely |  dike |    kdike |                     2 |
| 222 |  hana |   sho |     hsho |                     3 |
| 333 |  mike |  dime |    mdime |                     1 |
| 444 | sergi |   xan |     sxan |                     4 |

See it in action

答案 1 :(得分: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