mysql - “每个派生表都必须有自己的别名” Mysql 错误
问题描述
我的查询有什么问题:
SELECT minDate, deviceType, COUNT(*)
FROM (SELECT visitorId, deviceType,
MIN(sessionDate) as minDate
FROM sessions
GROUP BY visitorId)
WHERE minDate > DATE_SUB(NOW(), INTERVAL 14 DAY)
GROUP BY minDate, deviceId
我收到了这条消息:
查询错误:错误:ER_DERIVED_MUST_HAVE_ALIAS:每个派生表都必须有自己的别名
解决方案
错误信息很清楚。您必须为子选择生成的派生表设置别名。所以,给它一个别名。
另一个问题是,在子查询中,非聚合列deviceType
应该包含在GROUP BY
子句中。此更改可能会也可能不会产生您所期望的结果:如果没有,那么您需要提供示例数据、预期结果以及您要完成的工作的说明,以便帮助修复查询。
SELECT minDate, deviceType, COUNT(*)
FROM (
SELECT visitorId, deviceType, MIN(sessionDate) as minDate
FROM sessions
GROUP BY visitorId, deviceType -- all non-aggregated columns in the GROUP BY clause
) t -- alias here
WHERE minDate > DATE_SUB(NOW(), INTERVAL 14 DAY)
GROUP BY minDate, deviceId