MySQL 查询 : Getting distinct values for this query

标签 mysql

我想获取所有具有 item_id=100 和 item_id=200 的不同 user_id。在这种情况下正确的结果是 1。但是在这个简化的情况下,我的 SQL 查询会是什么样子呢? 表:

user_id    item_id
1          100
1          200
3          100

最佳答案

使用条件聚合:

SELECT user_id
FROM yourTable
WHERE item_id IN (100, 200)
GROUP BY user_id
HAVING COUNT(DISTINCT item_id) = 2;

此技巧首先限制为仅与您感兴趣的两个项目相对应的记录,然后断言匹配用户的不同项目计数为两个,暗示他符合条件。

有时逻辑需要以稍微不同的方式进行:

SELECT user_id
FROM yourTable
GROUP BY user_id
HAVING
    SUM(CASE WHEN item_id = 100 THEN 1 ELSE 0 END) > 0 AND
    SUM(CASE WHEN item_id = 200 THEN 1 ELSE 0 END) > 0;

这种形式在某些情况下可能更有用,但它的作用是一样的。

关于MySQL 查询 : Getting distinct values for this query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49752044/

相关文章:

mysql - 数据库规范化为 3NF 或 BCNF

php - 如何在 Codeigniter 中选择无条件连接多个表?

java - 使用 MySQL Workbench 保存和显示数据库中的图像

mysql - 根据 MySql 中表中其他列的值创建/更新行

mysql - 修改我的查询

MYSQL:将产品分成几列

mysql - 帮助编写 SELECT 语句

javascript - 将 backbone.js 同步到 php/MySQL

php - 带日期的 MySQL 错误

mysql - 使用 SQL,如何编写一个查询,如果没有条目则返回 null,但如果存在则列出所有条目?