首页 文章

SQL选择和计数相同的表

提问于
浏览
0

我正在制作一个时事通讯工具,其中包含一个存储电子邮件地址的用户和电子邮件ID的表,用于计算每封已发送电子邮件的总数和唯一数 .

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

db表的示例:

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 回答

  • 1

    只需做一个 GROUP BY . 使用 COUNT(*) 来计算 .

    select user, count(*) as counttotal
    FROM newsletter_log
    where email_id = 1
    group by user
    
  • 1

    试试这个 .

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

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

  • 3

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

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

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

  • 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
    

相关问题