【问题标题】:SQL query to count non unique fieldSQL查询计算非唯一字段
【发布时间】:2015-04-27 08:54:33
【问题描述】:

我试图弄清楚如何在最后的查询中添加对电子邮件字段的计数,但我遇到的问题是所需的一些数据是唯一的,即ID, DateTime,但电子邮件不是我想要的数。我只是想不出如何在一个 SQL 行中做到这一点。

例如返回:-

101, bla, prd, test@test.com, alfred, comp, test, 2015-10-10 10:10:10, 2  <-- count
100, bla, prd, test@test.com, alfred, comp, test, 2015-09-10 10:11:10, 2
099, bla, prd, anoter@email.com, simpson, comp, test, 2014-10-10 10:10:10, 1
098, bla, prd, bla@email.com, henry, comp, test, 2014-05-10 10:10:10, 1

查询

select TOP 200 
    ID, 
    FromPage, 
    Product, 
    Email, 
    Name, 
    Company, 
    Industry, 
    DateTime, 
    (count code here as EmailTotal)
from InstallEmails
WHERE product like 'prd%' 
ORDER BY ID DESC

【问题讨论】:

  • 您需要使用window function - COUNT(*) OVER(PARTITION BY Email)
  • 你使用的是哪个版本的sql server
  • 获取关键字“OVER”附近的语法错误。
  • 它对我有用,见this example on SQL Fiddle
  • 能否请您发布输出

标签: sql-server count group-by unique


【解决方案1】:

如果您使用的是 SQL Server 2005 或更高版本,您可以使用window function

SELECT  TOP 200 
        ID, 
        FromPage, 
        Product, 
        Email,
        Name, 
        Company, 
        Industry, 
        DateTime, 
        EmailTotal = COUNT(*) OVER(PARTITION BY Email)
FROM    InstallEmails
WHERE   product like 'prd%' 
ORDER BY ID DESC;

对于早期版本,您需要使用子查询:

SELECT  TOP 200 
        ID, 
        FromPage, 
        Product, 
        Email,
        Name, 
        Company, 
        Industry, 
        DateTime, 
        EmailTotal = (  SELECT  COUNT(*) 
                        FROM    (   SELECT  TOP 200 Email
                                    FROM    InstallEmails
                                    WHERE   product like 'prd%' 
                                    ORDER BY id DESC
                                ) AS ie2
                        WHERE   ie2.Email = ie.Email
                    )
FROM    InstallEmails AS ie
WHERE   product like 'prd%' 
ORDER BY ID DESC;

【讨论】:

    【解决方案2】:

    解决了..似乎没问题。

    select TOP 200 *,  (select COUNT(email) from InstallEmails where email = t.email) as EmailTotal
    from InstallEmails as t
    where product like 'prd%' 
    ORDER BY ID DESC
    

    【讨论】:

      猜你喜欢
      • 2014-11-12
      • 2012-08-06
      • 1970-01-01
      • 2017-01-08
      • 2016-05-31
      • 2022-01-17
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多