【问题标题】:Complex SQL query (COUNT, DISTINCT, case when, LEFT OUTER JOIN)复杂的 SQL 查询(COUNT、DISTINCT、case when、LEFT OUTER JOIN)
【发布时间】:2018-04-18 17:39:40
【问题描述】:

我有两张桌子

用户:

+------------+-----------+
| user_id    | company   |
+------------+-----------+
| 1          | Apple     |
| 2          | Microsoft |
+------------+-----------+

会话:

+------------+---------+------------+-----------+------------+
| 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

但是我在语法上遇到错误,我知道这是错误的,但我无法重新排列以取得成功。

有什么想法吗?

【问题讨论】:

    标签: mysql sql join count distinct


    【解决方案1】:

    总是以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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多