0

サブクエリでメイン クエリと同じテーブルから複数の列のカウントを取得するクエリで問題が発生しています。

これが私のクエリです:

SELECT 
    CM.entityId,
    (SELECT COUNT(*) 
     FROM _credit_control_main 
     WHERE invoiceAge < 14 AND entityId = CM.entityId) AS under14,
    (SELECT COUNT(*) 
     FROM _credit_control_main 
     WHERE invoiceAge >= 14 AND invoiceAge < 30 AND entityId = CM.entityId) AS under14to30,
    (SELECT COUNT(*) 
     FROM _credit_control_main 
     WHERE invoiceAge >= 30 AND invoiceAge < 60 AND entityId = CM.entityId) AS under30to60,
    (SELECT COUNT(*) 
     FROM _credit_control_main 
     WHERE invoiceAge >= 60 AND invoiceAge < 90 AND entityId = CM.entityId) AS under60to90,
    (SELECT COUNT(*) 
     FROM _credit_control_main 
     WHERE invoiceAge > 90 AND entityId = CM.entityId) AS over90,
    COUNT(*) AS iCount
FROM
    _credit_control_main AS CM
WHERE 
    ((CM.invoiceNet + CM.invoiceVat) - (creditNet+creditVat)) - (CM.paymentTotal - (CM.creditNet + CM.creditVat)) > 0.00
GROUP BY 
    entityId 
ORDER BY 
    `CM`.`entityId` ASC

サブクエリの 1 つに基づいて基本的なクエリを作成すると、正しいカウントが得られますが、そのままではカウントが大幅に膨らんでしまいます。

私は何を間違っていますか?

4

1 に答える 1

0

クエリが間違っている理由はわかりませんが、代わりにどのように記述すればよいかはわかります。これらのサブカウントはすべてキラーです。このトリックを理解してみると、読みやすさとパフォーマンスが大幅に向上します。

SELECT
    CM.entityId,
    SUM(invoiceAge < 14) as under14,
    SUM(invoiceAge >= 14 AND invoiceAge < 30) as under14to30,
    SUM(invoiceAge >= 30 AND invoiceAge < 60) as under30to60,
    SUM(invoiceAge >= 60 AND invoiceAge < 90) as under60to90,
    SUM(invoiceAge > 90) as over90,
    COUNT(*) AS iCount
FROM _credit_control_main AS CM
WHERE ((CM.invoiceNet+CM.invoiceVat)-(creditNet+creditVat))-(CM.paymentTotal-(CM.creditNet+CM.creditVat)) > 0.00
GROUP BY entityId
ORDER BY `CM`.`entityId` ASC;

ちなみに、invoiceAge = 90ここではどのカテゴリーにも当てはまりません。

于 2012-08-08T07:10:51.053 に答える