首页 > 解决方案 > 通过子查询/连接过滤 SQL 中的行

问题描述

这是用户、产品和月份的表格。

CREATE TABLE USERS (user VARCHAR(1),product VARCHAR(1),month INT);
INSERT INTO USERS (user,product,month) VALUES 
("A","X",9),("A","X",10),("A","X",10),("A","Y",11),
("B","Y",12),("B","X",10),("C","X",10),("D","Z",11),("D","X",9);

如何仅计算某个产品的用户数量(也可能在特定月份)?

标签: mysqlsql

解决方案


加入一个派生表,您可以X通过使用聚合并检查最小产品是否等于最大产品来获取仅使用产品的用户。然后使用count(DISTINCT ...).

SELECT count(DISTINCT u1.user)
       FROM USERS u1
            INNER JOIN (SELECT u2.user
                               FROM USERS u2
                               GROUP BY u2.user
                               HAVING min(u2.product) = max(u2.product)
                                      AND min(u2.product) = 'X') upx
                       ON upx.user = u1.user;

推荐阅读