天天看點

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 ,完美收工