我制作了一个新闻通讯工具,其中包含一个存储电子邮件地址的用户和电子邮件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
答案 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