Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql:请求的分组结果_Mysql_Sql - Fatal编程技术网

mysql:请求的分组结果

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

我的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.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不允许这样做。