天天看点

SQL多个聚合函数如何同时查询出来

前几天开发密钥系统的时候碰到了一个问题,具体如下

密钥根据产品和其他一些信息生成一个密钥,这个密钥会设置生效时间区间,所以密钥的状态是根据当前时间来进行计算的

然后再产品展示的时候,需要把产品关联的所有密钥数量和生效中的密钥数量查询出来。然后我已开始使用的方式是

select 
    a.id,a.name,count(b.id),count(c.id) 
from product a 
LEFT JOIN
secretkey b
on a.id = b.productId 
group by a.id
LEFT JOIN secretkey c
on a.id = c.productId
AND a.end_date > now()
AND now() >= a.start_date
group by a.id
           

最后直接报错了。

最后换一种写法,用多级关联的方式实现

select 
    p.id,
    p.name,
    p.allCount,
    count(k.id) as effectCount
from
    (
    select
        a.id,
        a.name,
        count(b.id) as allCount
    from
        product a
    LEFT JOIN
        secretkey b
    ON b.productId = a.id
    Group by a.id
    ) p
LEFT JOIN 
    secretkey k 
ON
    k.productId = p.id
AND now() >= k.start_date
AND k.end_date > now()
Group by p.id
           

OK ,完美收工