循环的替代方案

时间:2013-07-17 15:58:42

标签: mysql loops alternate

我正在尝试生成一个简单的报告,该报告将显示拥有多个不同品牌的客户数量。我写的以下查询一次生成一个所需的数字。我尝试写一个循环,它需要永远。还有其他选择吗?

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,依此类推。如果有办法自动化,请告诉我。

非常感谢。

1 个答案:

答案 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不同。