Mysql,创建一个只有一个冒号的 DISTINCT,同时显示另一个冒号

Mysql, make a DISTINCT with only one colone while showing the other

我有一个 table 这样的 :

ID USER PRODUCT
1 user1 product1
2 user2 product2
3 user2 product2
4 user3 product3

我想统计有多少不同的用户购买了每种产品。

我期待这样的事情:

PRODUCT count
product1  1
product2  1
product3  1

我有很多这样的事情,但没有我期望的结果。

SELECT DISTINCT PRODUCT, COUNT(ID) as count FROM `test`
group by USER

(下面的代码提供了这个结果:

PRODUCT count
site1     1
site2     2
site3     1

第二行应该是 1 而不是 2。 有什么建议吗? 谢谢

您要计算非重复计数:

SELECT PRODUCT, COUNT(DISTINCT USER) AS count
FROM test
GROUP BY PRODUCT;

您当前的查询正在使用 SELECT DISTINCT,它将尝试对所有被选择的内容应用不同的查询。但是,您只希望它应用于用户数。

Demo

试试下面的方法:

SELECT product, COUNT(DISTINCT user) 
FROM table 
WHERE 1 = 1
GROUP BY product