【发布时间】:2021-12-14 03:15:09
【问题描述】:
我正在尝试为用户收集所有会话(每行一行),然后按日期对行进行分组,以便可以在我的应用程序的前端对数据进行排序。
我能够从四个不同的表中选择和连接列,但我不知道现在如何在输出中使用 GROUP BY。
这行得通:
SELECT session_streams.app_id, session_streams.start_time, session_streams.scenario_fk, session_streams.session_fk, session_streams.stream_fk, scenarios.scenario_name, streams.stream_name
FROM session_streams
JOIN scenarios
ON session_streams.scenario_fk = scenarios.id
JOIN streams
ON session_streams.stream_fk = streams.id
JOIN users
ON users.app_id = session_streams.app_id
WHERE users.email = '{email}'
ORDER BY session_streams.start_time DESC
这会导致错误:
SELECT session_streams.app_id, session_streams.start_time, session_streams.scenario_fk, session_streams.session_fk, session_streams.stream_fk, scenarios.scenario_name, streams.stream_name
FROM session_streams
JOIN scenarios
ON session_streams.scenario_fk = scenarios.id
JOIN streams
ON session_streams.stream_fk = streams.id
JOIN users
ON users.app_id = session_streams.app_id
WHERE users.email = '{email}'
GROUP BY session_streams.start_time
ORDER BY session_streams.start_time DESC
错误:“列“session_streams.app_id”必须出现在 GROUP BY 子句中或用于聚合函数中”
当我将“必需”列添加到 GROUP BY 子句时,它会要求 SELECT 子句中列出的下一列。在 SELECT 子句中添加所有这些列不会产生不同的结果。
我怎样才能在这个输出中只按一列分组?
【问题讨论】:
-
您需要提供样本数据和所需的输出,并说明您正在尝试做什么
-
答案是:你不能。在
GROUP BY查询中(好吧,MySQL 除外),SELECT 列表中的每个表达式要么是在GROUP BY子句中重新出现的表达式,要么是一个聚合函数:MIN(),MAX(),AVG(),SUM(),COUNT(),仅列出通常最受欢迎的。
标签: sql postgresql join group-by