【问题标题】:Select multiple COUNTs for every day每天选择多个 COUNT
【发布时间】:2016-09-22 13:10:29
【问题描述】:

我有一张访客桌。 访客有以下列:

身份证

开始时间(日期)

已购买(布尔型)

已发货(布尔型)

对于过去 7 天内的每一天,我想选择 3 个以当天为 StartTime 的访客计数:

  • 访问者总数
  • 已购买 = true
  • 的访问者总数
  • 已发货 = true
  • 的访问者总数

理想的返回结果是:

Day    Total    TotalPurchased    TotalShipped
1      100      67                42
2      82       61                27
etc...

我习惯了 .NET Linq,所以这对我来说是一个相当大的挑战。

到目前为止,我想出的只是以下几点:

SELECT COUNT(*) AS Total
FROM [dbo].[Visitors]
WHERE DAY([StartTime]) = DAY(GETDATE())

它可以很好地选择当天的总数,但是我现在感觉很卡,所以如果有人能指出我正确的方向,那就太好了。

【问题讨论】:

  • GROUP BY DAY([StartTime])
  • 我猜这是针对 SQL Server 的?你能相应地标记 DBMS 吗?

标签: sql sql-server


【解决方案1】:

过去 7 天使用 Stanislav 提出的查询,但带有 WHERE 子句

   SELECT DAY([StartTime]) theDay,
           COUNT(*) AS Tot,
           SUM(CASE WHEN Purchased=true THEN 1 ELSE 0 END) as TotPurch,    
           SUM(CASE WHEN Shipped=true THEN 1 ELSE 0 END) as TotShip
    FROM [dbo].[Visitors]
    WHERE [StartTime] BETWEEN GETDATE()-7 AND GETDATE()
    GROUP BY DAY([StartTime]) 

【讨论】:

    【解决方案2】:
    SELECT COUNT(*) AS Total,
           SUM(CASE WHEN Purchased=true THEN 1 ELSE 0 END) as TotalPurchased,    
           SUM(CASE WHEN Shipped=true THEN 1 ELSE 0 END) as TotalShipped
    FROM [dbo].[Visitors]
    WHERE DAY([StartTime]) = DAY(GETDATE())
    

    并添加 GROUP BY DAY([StartTime]) 作为 jarlh 提到的

    【讨论】:

      【解决方案3】:

      这是一个简单的选择,可以为您提供所需的数据集

      SELECT DATEDIFF(day,StartTime, getdate())+1 as [Day], -- Add 1 to display 1 to 7 instead of 0 to 6
      COUNT(*) as Total, 
      SUM(CASE WHEN Purchased = 1 THEN 1 ELSE 0 END) as TotalPurchased, 
      SUM(CASE WHEN Shipped = 1 THEN 1 ELSE 0 END) AS TotalShipped 
      FROM Visitors
      WHERE DATEDIFF(day,startTime,GETDATE()) < 6
      GROUP BY DATEDIFF(day,startTime,GETDATE())
      ORDER BY 1
      

      此查询不会考虑日期的时间部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 2011-10-06
        • 1970-01-01
        • 2012-05-06
        相关资源
        最近更新 更多