我正在尝试计算给定查询的行数。但是count会返回比应该更多的行。发生了什么事?
此查询仅返回1行。
select *
from `opportunities`
inner join `companies` on `opportunities`.`company_id` = `companies`.`id`
left join `opportunityTags` on `opportunities`.`id` = `opportunityTags`.`opportunity_id`
where `opportunities`.`isPublished` = '1' and `opportunities`.`Company_id` = '1'
group by `opportunities`.`id` ;
此查询返回有3行。
select count(*) as aggregate
from `opportunities`
inner join `companies` on `opportunities`.`company_id` = `companies`.`id`
left join `opportunityTags` on `opportunities`.`id` = `opportunityTags`.`opportunity_id`
where `opportunities`.`isPublished` = '1' and `opportunities`.`Company_id` = '1'
group by `opportunities`.`id`;
答案 0 :(得分:0)
当你选择count(*)时,它会在group by之前计算。您可能(不幸的是我的领域是SQL Server,我没有要测试的mySQL实例)通过使用over()函数修复此问题。
例如:
select count(*) over (partition by `opportunities`.`id`)
编辑:实际上看起来在mySQL中看起来不是这样,我的不好。如何将整个事物包装在新的select语句中?这不是最优雅的解决方案,但会为您提供您追求的数字。