为多个表构建sql查询,用于cyfe仪表板

时间:2015-10-29 09:23:34

标签: mysql sql


为了监控我的用户数据,我想在群组分析中可视化我的数据。假设我的数据库中有以下表格:

表:track_register
user_id,日期,时间

在下表中:

表:track_login
user_id,日期,时间,成功

我希望我的队列分析看起来像:

月份签名Ups多了一次 可40 80%

我正在使用Cyfe对此进行可视化,因此必须将数据格式化为如下表格:
月份,签约次数增加一次 2015年5月40,32
2015年6月,6,5,5

(对于cyfe示例click here

最终,我想从其他表格中向群组添加更多数据,例如实际购买产品的用户百分比以及更多优质内容。

第一组数据(每月注册)不是困难的部分。但我正在努力的是如何从轨道登录表中获取数据。我将不得不计算特定用户所拥有的次数,如果那是> 1然后+1。我可以想象你使用CASE。麻烦的是用正确的蛾把它分开。因为de +1应该去的飞蛾需要从track_register表中获取。

对我来说,将这一切都放在一个查询中似乎很难?但如果无法做到,为什么要去建立一个关于cyfe的队列分析?

1 个答案:

答案 0 :(得分:0)

嗨DATE因为字段名称受到限制所以我使用了DATA。

您可以尝试以下代码:

    SELECT   TO_CHAR(NVL(a.data, b.data), 'MON YYYY') months
         , COUNT(DISTINCT a.login) sign_ups
         , SUM(CASE WHEN COUNT(DISTINCT b.login) > 1 THEN 1 ELSE 0 END) Loged_in_more_then_once
    FROM   track_register a LEFT JOIN track_login b ON a.login = b.login
GROUP BY   TO_CHAR(NVL(a.data, b.data), 'MON YYYY')
ORDER BY   1

或者:

     SELECT   TO_CHAR(NVL(a.data, b.data), 'MON YYYY') months
         , COUNT(DISTINCT a.login) sign_ups
         , SUM(CASE WHEN COUNT(DISTINCT b.login) > 1 THEN 1 ELSE 0 END) Loged_in_more_then_once
    FROM   track_register a LEFT JOIN track_login b
              ON a.login = b.login AND LAST_DAY(a.data) = LAST_DAY(b.data)
GROUP BY   TO_CHAR(NVL(a.data, b.data), 'MON YYYY')
ORDER BY   1