【问题标题】:MySQL: Sub-select not returning expected COUNT resultMySQL:子选择不返回预期的 COUNT 结果
【发布时间】:2016-01-14 20:10:03
【问题描述】:

我有以下查询,它运行和处理正常,问题是子选择只返回 1 或 0,而它应该返回指定的过去 24 小时内的所有记录的COUNTWHERE 子句中,并且都属于子选择标准。

我怀疑问题在于子选择一次只比较 ID,但我尝试将 WHERE tbr.ID = ID 更改为 WHERE tbr.ID IN (ID),但它仍然只返回 1 或 0。

别名 total 上的COUNT 返回 728,因此数据确实存在并且在过去 24 小时内有效,这已得到验证。

SELECT COUNT(tbr.`ID`) AS `total`
, (SELECT COUNT(`ID`) FROM `cred` WHERE tbr.`ID` = `ID` AND `match` = 'EXACT' AND `number` <> '') AS `exact`
, DATE(NOW()) AS `reportDate`
FROM `cred` tbr
WHERE tbr.`processed` >= (NOW() - INTERVAL 1 DAY);

【问题讨论】:

    标签: mysql count subquery


    【解决方案1】:

    也许条件聚合会有所帮助。

    SELECT 
       COUNT(tbr.`ID`) AS `total`
     , COUNT(case when match` = 'EXACT' AND `number` <> '' then tbr.`ID` end) AS `exact`
     , DATE (NOW()) AS `reportDate`
    FROM `cred` tbr
    WHERE  tbr.`processed` >= (NOW() - INTERVAL 1 DAY);
    

    样本数据和预期结果有助于选择解决方案。

    【讨论】:

      【解决方案2】:
      SELECT COUNT(tbr.`ID`) AS `total`
      , (SELECT COUNT(`ID`) 
          FROM `cred` 
          WHERE `ID` IN (tbr.`ID`)    --try with inverting this condition
              AND `match` = 'EXACT' 
              AND `number` <> '') AS `exact`
      , DATE(NOW()) AS `reportDate`
      FROM 
          `cred` tbr
      WHERE 
          tbr.`processed` >= (NOW() - INTERVAL 1 DAY);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-14
        • 2023-04-04
        • 2017-12-28
        • 2018-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        相关资源
        最近更新 更多