DISTINCT
条件付きステートメントと複数の値を使用して合計を収集する必要がありますGROUP BY
。以下の例は、はるかに複雑なクエリの単純化されたバージョンです。
実際のクエリは非常に大きいため、クエリを大幅に書き直す必要はありません。
データ
Contracts
id advertiser_id status
1 1 1
2 2 1
3 3 2
4 1 1
近いクエリ
SELECT
COUNT( DISTINCT advertiser_id ) AS advertiser_qty,
COUNT( DISTINCT id ) AS contract_qty,
SUM( IF( status = 1, 1, 0 ) ) AS current_qty,
SUM( IF( status = 2, 1, 0 ) ) AS expired_qty,
SUM( IF( status = 3, 1, 0 ) ) AS other_qty
FROM (
SELECT * FROM `contracts`
GROUP BY advertiser_id, id
) AS temp
現在返品中
advertiser_qty contract_qty current_qty expired_qty other_qty
3 4 3 1 0
戻る必要があります
advertiser_qty contract_qty current_qty expired_qty other_qty
3 4 2 1 0
current_qty
これはstatus = 1
for onlyを使用したレコードの合計でDISTINCT advertiser_ids
あり、各合計関数には同じ修正が必要です。
誰かが関数にプラグインできる簡単なソリューションを持っていることを願っていSUM
ます。
-ありがとう!!