MySQL:Sub-select 未返回预期的 COUNT 个结果
MySQL: Sub-select not returning expected COUNT result
我有以下查询,它运行和处理正常,问题是子 select 只在 return 应该 return 时为 1 或 0在 WHERE
子句中指定的过去 24 小时内的所有记录中的 COUNT
并且都属于子 select 标准。
我怀疑问题出在 sub-select 一次只比较 ID
但我尝试将 WHERE tbr.ID = ID
更改为 WHERE tbr.ID IN (ID)
但它仍然只是 returning 1 或 0.
别名上的COUNT
总计returns 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);
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);
也许条件聚合会有所帮助。
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);
示例数据和预期结果有助于选择解决方案。
我有以下查询,它运行和处理正常,问题是子 select 只在 return 应该 return 时为 1 或 0在 WHERE
子句中指定的过去 24 小时内的所有记录中的 COUNT
并且都属于子 select 标准。
我怀疑问题出在 sub-select 一次只比较 ID
但我尝试将 WHERE tbr.ID = ID
更改为 WHERE tbr.ID IN (ID)
但它仍然只是 returning 1 或 0.
别名上的COUNT
总计returns 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);
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);
也许条件聚合会有所帮助。
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);
示例数据和预期结果有助于选择解决方案。