SQL选择和计数相同的表

时间:2016-10-07 09:08:53

标签: sql count distinct

我制作了一个新闻通讯工具,其中包含一个存储电子邮件地址的用户和电子邮件ID的表格,用于计算每封已发送电子邮件的总开启次数和唯一性。

我希望显示一个详细的页面,其中包含用户打开电子邮件的电子邮件地址和计数时间。

db table的示例:

email_id | user_id | user
----------------------------
 1 | 1 | alpha@domain.com
 1 | 1 | alpha@domain.com
 1 | 1 | alpha@domain.com
 1 | 2 | beta@domain.com
 1 | 3 | gamma@test.org
 1 | 4 | mars@planet.net
 1 | 4 | mars@planet.net

网络结果:

║  User             ║ Times ║
╬═══════════════════╬═══════╣
║ alpha@domain.com  ║    3  ║
║ beta@domain.com   ║    1  ║
║ gamma@test.org    ║    1  ║
║ mars@planet.net   ║    2  ║

我尝试了以下查询,但它仅适用于第一行,然后截断其余部分:

SELECT DISTINCT user, count(DISTINCT user) as counttotal 
FROM newsletter_log 
where email_id = 1

4 个答案:

答案 0 :(得分:3)

只需做一个COUNT(*)。使用select user, count(*) as counttotal FROM newsletter_log where email_id = 1 group by user 来计算。

simpleWeather

答案 1 :(得分:1)

试试这个。

 select user,count(user) as times from newsletter_log where email_id = 1 group by user

你不需要使用不同的。只需使用group by。

答案 2 :(得分:1)

概念就像,你想根据用户群得到计数。因此,请将用户视为群组,并按群组进行计数。

select user, count(1) as cnt
FROM newsletter_log
where email_id = 1
group by user

对于知识,您可以研究各种计数模式,如count(*),count(1)等。

答案 3 :(得分:1)

包括总数:

SELECT email, IsNull(User, 'Total'), COUNT(User) [Count]
FROM newsletter_log
WHERE email = 1
GROUP BY email, User
  WITH (ROLLUP)
ORDER BY COUNT(User) DESC