mysql - 复杂 SQL 查询(COUNT、DISTINCT、case when、LEFT OUTER JOIN)

标签 mysql sql join count distinct

我有两张 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/

相关文章:

mysql - 消除 mySQL 子查询

java转mysql jdbc连接问题

mysql - SQL 查询错误 : 'doesn' t know columnName' in Where clause

sql - 将逗号分隔的SQL数据转为SQL "in"指令

重新运行每个条目的 MySQL 参数值

SQL 内连接 3 个表?

Mysql内连接或左连接

mysql - 优化从3个表mysql中选择元素的查询

php - SQL注入(inject)相关:Why does my SQL query return only part of value with concatenate?

c# - 从 SQLITE PCL 获取特定月份的计数