SQL 准备数据以显示图表

Posted

技术标签:

【中文标题】SQL 准备数据以显示图表【英文标题】:SQL prepare data to display charts 【发布时间】:2013-10-01 10:38:31 【问题描述】:

我想建立注册用户图表(每天)

我将使用谷歌图表,所以我应该有数据可以使用

我写了一个按天统计注册用户数的 SQL 查询

SELECT DATE(created_at), COUNT(DISTINCT id) amount 
FROM users 
GROUP BY DATE(created_at)

这会返回一个包含数据和用户数的哈希

"date"=>"2013-09-24", "amount"=>"100" 
"date"=>"2013-09-26", "amount"=>"1" 
"date"=>"2013-10-01", "amount"=>"2" 

问题:

我想在没有任何新用户的日子里显示 0 个注册,例如

"date"=>"2013-09-25", "amount"=>"0"

(我正在使用 pg 数据库,我也在 rails 应用程序中使用此查询,所以您可以使用 ActiveRecord 给我一个建议)


                           **UPDATE**

对于我的 Rails 应用程序,我以这种方式解决了这个问题

#controller
  def charts
    users = User.select([:id, :created_at])
    @data = users.where("created_at >= ?", Date.today - 1.month)
    @inf = [] 
    @date = [] 
    month = Date.today - 1.month
    month.upto(Date.today).each do |date| 
      @date << date.strftime('%d/%m')   
      @inf << @data.select|u| u.created_at.to_date == date .size
    end 
  end

@inf@date 数组中,我有注册用户数和日期。

【问题讨论】:

【参考方案1】:

您将需要您希望考虑的所有日期的来源。

例如从第一次进入到现在

WITH cte_days 
AS 
( 
    SELECT MIN(DATE(created_at)) AS [Day] FROM USERS -- First registered User
    UNION ALL 
    SELECT DATEADD(dd, 1, [Day]) 
    FROM cte_days
    WHERE DATEADD(dd, 1, [Day]) < GETDATE() -- Stop at today
)
SELECT [Day], COUNT(DISTINCT id) amount 
FROM cte_days LEFT JOIN users ON [Day] = DATE(created_at)
GROUP BY [Day]

【讨论】:

【参考方案2】:

我不知道您正在使用的数据库,但由于没有人回答这个问题,但这就是我在 MSSQL 中的处理方式

  DECLARE @MinDate DATETIME
  DECLARE @MaxDate DATETIME
  SET @MinDate = '01 Jan 2013'
  SET @MaxDate = '31 Jul 2013'

  ;with d(date) as (
  select @MinDate
  union all
  select date+1
  from d
  where date < @MaxDate
  )
  select d.date created_at, COUNT(DISTINCT u.id) amount
   from d
   left join users u
        on u.created_at = d.date
     GROUP BY d.date
    OPTION (MAXRECURSION 0) 

您只需要 OPTION (MAXRECURSION 0) 的日期范围 > 100 天

【讨论】:

以上是关于SQL 准备数据以显示图表的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL 数据库显示信息到谷歌图表

tableau 怎么添加参考线

Rails 视图表以显示来自另一个模型的值

swift:重新加载视图以在图表中显示新数据

excel柱状图标既显示数量也显示占比 怎样设置啊

将图表数据绑定到日期选择器以显示自定义时间线