0

多数の異なるブランドを所有している顧客の数を表示する簡単なレポートを生成しようとしています。私が書いた次のクエリは、必要な数値を一度に 1 つずつ生成します。ループを書いてみましたが、永遠にかかります。代替手段はありますか?

SELECT COUNT(DISTINCT customer_id) 
FROM
(
SELECT customer_id,COUNT(DISTINCT brand) AS no_of_customers
FROM table_A
WHERE brand_id != 10
GROUP BY customer_id
HAVING COUNT(DISTINCT brand) =1 
ORDER BY customer_id) as t1; 

これが何をするかというと、異なるブランドの合計数 = 1 の顧客の数を教えてくれるということです。ブランドの数を 2、3 などに変更します。これを自動化する方法があれば教えてください。

どうもありがとう。

4

1 に答える 1

2

の第 2 レベルを使用してGROUP BY、ループするのではなく、1 つのクエリですべてを取得します。

SELECT no_of_brands, COUNT(*) no_of_customers
FROM (SELECT customer_id, COUNT(DISTINCT brand) no_of_brands
      FROM Table_A
      WHERE brand_id != 10
      GROUP BY customer_id) x
GROUP BY no_of_brands

DISTINCT内側のクエリのグループ化により顧客 ID が異なることが保証されるため、外側のクエリも必要ありません。

于 2013-07-17T16:16:36.077 に答える