0

我正在尝试生成一个简单的报告,该报告将显示拥有不同品牌数量的客户数量。我编写的以下查询一次生成一个所需的数字。我试着写一个循环,它需要很长时间。有替代方案吗?

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

使用第二级GROUP BY在一个查询中获取它们,而不是循环。

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 回答