MySQL:如何过滤掉不包含特定值的组?

标签 mysql group-by having

我想过滤掉属于不包含 site_id 2 的 session 的所有 request_id。因此,如果用户没有访问网站 2,则该 session 与我无关。

request_id   session_id   site_id
1            1            1
2            1            2
3            1            3
4            2            1
5            2            3
6            2            3

结果:

request_id   session_id   site_id
1            1            1
2            1            2
3            1            3

我知道我能想到类似的东西(没有检查是否有效):

SELECT
session_id,
GROUP_CONCAT(site_id order by request_id asc SEPARATOR ', ') as site_ids
FROM requests
GROUP BY session_id
HAVING site_id LIKE ('% 2, %' OR '2, %')
ORDER BY session_id asc;

但我还需要未聚合在一个单元格中的相关 session_ids。那么是否可以避免生成输出的 GROUP BY session_id 呢?

您有更好、更高效的解决方案吗?

最佳答案

我认为您可能需要使用子选择来实现所需的结果。

SELECT
request_id, session_id, site_id
FROM requests
WHERE session_id in (
  select distinct session_id FROM requests where site_id=2)
ORDER BY session_id asc;

或者加入

SELECT
A.request_id, A.session_id, A.site_id
FROM requests A
RIGHT JOIN requests B ON
   A.session_id = B.session_id AND B.site_id=2
GROUP BY A.session_id
ORDER BY A.session_id asc;

关于MySQL:如何过滤掉不包含特定值的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35276986/

相关文章:

mysql - 使用 HAVING 子句从 MySQL View 中选择返回空结果集

mysql - 在内连接中从连接表中获取数据

postgresql - 如何在 postgres 的组中使用多个过滤器?

mysql - 使用 HAVING 和 GROUP BY 获取总金额

sql - 查询类别/交易的唯一值

python - 如何对具有非数值的数据框进行分组和透视

mysql - 托管在客户端时的数据库安全

mysql - 如何在 hive 中执行 LEFT OUTER JOIN 而不重复以仅检查右表中的一个值?

php - Mysql 显示进程 - sleep 命令和做什么

VB.NET 在使用 Group By LINQ 语句时返回 IEnumerable(Of IEnumerable(Of T))