我有一个查询,我需要它来从两个单独的表中选择两个不同时间的平均时差。
在查询的下一部分出现之前,这似乎很容易:我必须根据学生进入办公室的原因进行分组。所以现在这个查询需要:
我写了这个查询:
SELECT why,
count(why),
SEC_TO_TIME(AVG(MAX(support.finishtime) - session.signintime))
FROM session
LEFT JOIN support
ON support.session_id = session.session_id
WHERE status = 3
GROUP BY why;
但是我收到错误:
ERROR 1111(HY000):无效使用群组功能
我似乎不明白这个问题。从阅读过去他们正在考虑使用的问题?但我不明白在这种情况下如何或甚至在哪里添加having子句。
非常感谢任何帮助。
谢谢
答案 0 :(得分:1)
SELECT
session.why AS Reason,
COUNT(session.why) AS Count,
SEC_TO_TIME(AVG(TIMEDIFF(t.fin, session.signintime))) AS Time
FROM session
LEFT JOIN (SELECT support.session_id, MAX(support.finishtime) AS fin
FROM support
GROUP BY support.session_id) AS t
ON session.session_id = t.session_id
WHERE session.status = 3
GROUP BY session.why
ORDER BY session.signintime DESC
这完美地完成了这项工作!我刚刚在几个小时前得到它,我从未真正使用过子查询,所以我的教授帮助我解决了这个问题。
答案 1 :(得分:0)
好的,仔细看一下,我想你想要的是一个嵌套查询来获取最大支持记录。
一种方法是:
SELECT why,
count(why),
SEC_TO_TIME(AVG((select max(finishtime) from
support where support.session_id = session.session_id) -
session.signintime))
FROM session
WHERE status = 3
GROUP BY why;
我创建了一个SQL Fiddle,因此您可以查看我正在使用的表结构。