以下是我正在使用的查询。但是
查询:
SELECT c.session_id session_number,
u.first_name first_name,
u.last_name last_name,
Min(c.timestamp) session_start_ts,
Max(c.timestamp) session_end_ts,
Count(
CASE
WHEN c.message_type='IN' THEN 1
ELSE NULL
END) message_in_count,
Count(c.message_type) total_messages
FROM users u
join chatlog c
ON u.user_id = c.user_id
WHERE Trunc(c.timestamp) BETWEEN To_date('2017-10-11','YYYY-MM-DD') AND To_date('2017-11-09','YYYY-MM-DD')
GROUP BY c.session_id,
order by timestamp;
问题在于它给出了一个错误,指出“不是GROUP BY表达式”。但是,如果我使用:
,而不是仅按会话ID进行分组 group by c.session_id, u.first_name, u.last_name, c.timestamp
虽然first_name和last_name的值对于特殊情况session_id和timestamp是相同的,但我只取最大值。所以无法理解为什么我无法按session_id进行分组。
答案 0 :(得分:1)
“无法理解为什么我无法按session_id分组”
Oracle聚合函数的规则是我们需要按所有分组投影中的非聚合列。在你的情况下是
bidirectional_edges(source_id)
“我们如何克服这一点。我的意思是必须有一种方法可以克服这一点。所以,如果你想选择多个列而只是按特定列分组?”
这不适用于您的情况。你说:
“first_name和last_name的值对于特定的(sic)session_id是相同的”
表示按group by c.session_id, u.first_name, u.last_name
分组与仅session_id,first_name,last_name
分组相同。但作为一般观点,我们可以使用分析函数在与结果集不同的窗口中聚合值。 Find out more