【问题标题】:Count entries from different tables per day每天计算来自不同表的条目
【发布时间】:2016-07-06 10:29:59
【问题描述】:

我有两张桌子:

reports:
    date, uuid
warns:
    date, uuid, active

其中date 是时间戳(2016-05-16 16:06:58)uuid 是用户标识符字符串,active 是布尔值。

我想显示每天有多少 reportswarns 条目。目前我有这个查询:

SELECT DATE(date) Date, count(*) Reports
FROM reports
GROUP BY DATE(date)
ORDER BY DATE(date) DESC

显示如下表格:

Date       | Reports 
-----------+---------
2016-07-05 | 192     
2016-07-04 | 230     
2016-07-03 | 227     

但我也想加入当天发生了多少 warns 条目,但前提是它的 active 列是 TRUE,所以我希望查询返回这样的表:

Date       | Reports | Warns
-----------+---------+-------
2016-07-05 | 192     | 47
2016-07-04 | 230     | 59
2016-07-03 | 227     | 56

我是 MYSQL 的新手,所以我还没有弄清楚我将如何做到这一点。我在 JOINS 和 UNIONS 上进行了一些搜索,但不知道它们是否/如何适用于我的案例。任何帮助将不胜感激。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以使用相关查询:

    SELECT DATE(reports.date) Date, count(*) Reports,
           (SELECT COUNT(*) FROM warns
            WHERE DATE(warns.date) = DATE(reports.date) and warns.active = 'TRUE') as warns_cnt
    FROM reports
    GROUP BY DATE(reports.date)
    ORDER BY DATE(reports.date) DESC
    

    【讨论】:

      【解决方案2】:

      为了说明联合,你可以:-

      /*
      CREATE TEMPORARY TABLE REPORTS (DTE DATE, UUID INT);
      TRUNCATE TABLE REPORTS;
      INSERT INTO  REPORTS VALUES
      ('2016-07-05' , 192     ),
      ('2016-07-05' , 192     ),
      ('2016-07-05' , 192     ),
      ('2016-07-04' , 230     ),
      ('2016-07-04' , 230     ),
      ('2016-07-03' , 227     ),
      ('2016-07-02' , 227     );
      
      DROP TABLE WARNS;
      CREATE TEMPORARY TABLE WARNS (DTE DATE, UUID INT,ACTIVE INT);
      INSERT INTO  WARNS VALUES
      ('2016-07-05'      , 47,0),
      ('2016-07-05'      , 47,1),
      ('2016-07-05'      , 47,1),
      ('2016-07-04'      , 59,0),
      ('2016-07-03'      , 56,1),
      ('2016-07-03'      , 56,1),
      ('2016-07-03'      , 56,1);
      */
      
      
      SELECT  S.DTE, SUM(S.REPORTS) REPORTS, SUM(S.WARNS) WARNS
      FROM         
      (
      SELECT DTE,1 AS REPORTS, 0 AS WARNS  FROM REPORTS 
      UNION ALL
      SELECT DTE,0, 1 FROM WARNS WHERE ACTIVE = TRUE 
      ) S
      GROUP BY S.DTE
      

      查询在子查询中创建 REPORTS 和 WARNS 列,然后在子查询之外求和。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-20
        • 2017-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多