mysql - 通过子查询/连接过滤 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);
如何仅计算某个产品的用户数量(也可能在特定月份)?
解决方案
加入一个派生表,您可以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;
推荐阅读
- javascript - UTF-8 编码算法如何处理 8 位块(在 JavaScript 中)?
- laravel - 查询 Laravel 嵌套关系 [Laravel 6.x]
- python - 自动化我在 python 中的命令后插入的路径
- mysql - SQL问题:内连接给了我空数据集
- javascript - (javascript) 本地存储值 -> 我可以更改对象的顺序吗?
- transactions - 交易收据日志为空以太坊
- laravel - Laravel 6 中多用户应用程序的不同用户创建的跟踪记录
- javascript - ReactJS event.preventDefault(); 不是函数
- javascript - 从 React 中的渲染组件中提取元素数组
- python - 一个基类的方法调用同一个基类中定义的另一个方法,最终可能会调用一个派生类的方法来覆盖它