我正在尝试生成一个简单的报告,该报告将显示拥有多个不同品牌的客户数量。我写的以下查询一次生成一个所需的数字。我尝试写一个循环,它需要永远。还有其他选择吗?
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,依此类推。如果有办法自动化,请告诉我。
非常感谢。
答案 0 :(得分: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不同。