mysql:请求的分组结果
我的sql请求为我提供:mysql:请求的分组结果,mysql,sql,Mysql,Sql,我的sql请求为我提供: SELECT sf_guard_user.id, sf_guard_user.username, sf_guard_user.avatar_time, fromid, toid,sum(chatMessage.fromidlu) - sum(chatMessage.toidlu) as nonlus FROM chatMessage, sf_guard_user WHERE (chatMessage.fr
SELECT
sf_guard_user.id, sf_guard_user.username, sf_guard_user.avatar_time, fromid, toid,sum(chatMessage.fromidlu) - sum(chatMessage.toidlu) as nonlus
FROM chatMessage, sf_guard_user
WHERE (chatMessage.fromid = sf_guard_user.id AND toid=16595 AND toidhidden=0) OR (chatMessage.toid = sf_guard_user.id AND fromid=16595 AND fromidhidden=0)
GROUP by fromid
我想对这个结果应用另一个SQL,所以最终结果是在“nonlus”上求和
SELECT id, username, avatar_time, fromid, toid, sum(nonlus) FROM
**this request**
order by id
我试过了
SELECT id, username, avatar_time, fromid, toid, sum(nonlus) FROM (
SELECT
sf_guard_user.id, sf_guard_user.username, sf_guard_user.avatar_time, fromid, toid,sum(chatMessage.fromidlu) - sum(chatMessage.toidlu) as nonlus
FROM chatMessage, sf_guard_user
WHERE (chatMessage.fromid = sf_guard_user.id AND toid=16595 AND toidhidden=0) OR (chatMessage.toid = sf_guard_user.id AND fromid=16595 AND fromidhidden=0)
GROUP by fromid)
Group by id
但是得到错误
每个派生表都必须有自己的别名
您只需将别名分配给内部
选择,请尝试以下操作:
SELECT id, username, avatar_time, fromid, toid, sum(nonlus) FROM (
SELECT
sf_guard_user.id as id, sf_guard_user.username as username, sf_guard_user.avatar_time as avatar_time, fromid, toid, sum(chatMessage.fromidlu) - sum(chatMessage.toidlu) as nonlus
FROM chatMessage, sf_guard_user
WHERE (chatMessage.fromid = sf_guard_user.id AND toid=16595 AND toidhidden=0) OR (chatMessage.toid = sf_guard_user.id AND fromid=16595 AND fromidhidden=0)
GROUP by fromid) a
Group by a.id
按照字面意思,只需在你的后面键入字母a
)
在你的第一个分组人之后。关于这一点,有数百个问题。您是否尝试简单地将错误消息放入SO的搜索框中?您应该学会使用显式的JOIN
而不是交叉乘积。当您按id分组时,select中的任何列(如果不是按列分组)都需要进行聚合。@PeterHe MySQL允许这样做。对于由分组列唯一定义的列,它不是必需的。它取决于sql_模式,并且可能会得到意外的结果。标准sql不允许这样做。