我有两张 table
用户:
+------------+-----------+
| user_id | company |
+------------+-----------+
| 1 | Apple |
| 2 | Microsoft |
+------------+-----------+
session :
+------------+---------+------------+-----------+------------+
| session_id | user_id | start_time | end_time | user_agent |
+------------+---------+------------+-----------+------------+
| 1 | 1 | 12:00:00 | 12:20:00 | X |
| 2 | 1 | 14:10:00 | 14:14:00 | Y |
+------------+---------+------------+-----------+------------+
我想在一个查询中查询两个表,并得到如下所示的输出:
+------------+-----------+--------------------+
| user_id | company | unique_user_agents |
+------------+-----------+--------------------+
| 1 | Apple | 2 |
| 2 | Microsoft | 0 |
+------------+-----------+--------------------+
使用这样的查询:
x
SELECT users.user_id, users.company_name, COUNT(DISTINCT (case when sessions.start_time >= '11:00:00' AND sessions.end_time <= '15:30:00' then sessions.user_agent)) FROM users GROUP BY users.user_id LEFT OUTER JOIN sessions ON users.user_id = sessions.user_id
但是我收到了有关语法的错误,我知道这是错误的,但我无法重新排列以取得成功。
有什么想法吗?
最佳答案
始终以 end
结尾且必须在所有连接之后保留 group by
的情况
SELECT users.user_id, users.company_name, COUNT(DISTINCT case when sessions.start_time >= '11:00:00' AND sessions.end_time <= '15:30:00' then sessions.user_agent end)
FROM users
LEFT OUTER JOIN sessions
ON users.user_id = sessions.user_id
GROUP BY users.user_id
关于mysql - 复杂 SQL 查询(COUNT、DISTINCT、case when、LEFT OUTER JOIN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49905857/