mysql - SQL GROUP BY 多列?

标签 mysql sql

我有一个表,我需要按两个不同的列对条目进行分组

这是我的代码

SELECT *
    FROM (
        SELECT max(user_msg.id) AS mid, max(user_msg.timestamp) AS tsp, user_msg.text, 
        usr1.id AS u1_id, usr1.nickname AS u1_nickname, usr1.avatar AS u1_avatar, usr1.avatar_art AS u1_avatar_art, 
        usr2.id AS u2_id, usr2.nickname AS u2_nickname, usr2.avatar AS u2_avatar, usr2.avatar_art AS u2_avatar_art,
        COUNT(user_msg.id) AS cnt
        FROM user_msg 
        join user using (client_id)
        LEFT JOIN user AS usr1 ON user_msg.from_id=usr1.id
        LEFT JOIN user AS usr2 ON user_msg.to_id=usr2.id
        WHERE user_msg.to_id = '".$user_id."' AND to_delete='0' OR user_msg.from_id = '".$user_id."' AND to_delete='0'
        group by u1_id, u2_id ORDER by tsp DESC
    ) c 

它应该类似于 group by u1_id AND u2_id

最佳答案

您需要使用原始列名称,而不是别名。它们还没有被处理(好吧,在 SQL Server 中它们还没有被处理:不确定 MYSQL)。

...
   WHERE user_msg.to_id = '".$user_id."' AND to_delete='0' OR user_msg.from_id = '".$user_id."' AND to_delete='0'
  group by usr1.id, usr2.id
  ORDER by tsp DESC
...

编辑:MySQL allows aliases in the GROUP BY

所以,我怀疑 GROUP BY 是错误且不明确的,需要像下面的标准 SQL 一样。有或没有别名

喜欢这个问题:SQL Query not showing expected result

[编辑结束]

请注意,要制作此标准 SQL(或在任何其他 RDBMS 上运行),您需要使用 GROUP BY 中未聚合的所有列:

    SELECT
       max(user_msg.id) AS mid, 
       max(user_msg.timestamp) AS tsp, 
       user_msg.text, 
       usr1.id AS u1_id, usr1.nickname AS u1_nickname, usr1.avatar AS u1_avatar, usr1.avatar_art AS u1_avatar_art, 
       usr2.id AS u2_id, usr2.nickname AS u2_nickname, usr2.avatar AS u2_avatar, usr2.avatar_art AS u2_avatar_art,
       COUNT(user_msg.id) AS cnt
    FROM user_msg 
    join user using (client_id)
    LEFT JOIN user AS usr1 ON user_msg.from_id=usr1.id
    LEFT JOIN user AS usr2 ON user_msg.to_id=usr2.id
    WHERE user_msg.to_id = '".$user_id."' AND to_delete='0' OR user_msg.from_id = '".$user_id."' AND to_delete='0'
    GROUP BY 
          user_msg.text, usr1.id, usr1.nickname, usr1.avatar, usr2.avatar_art,
          usr2.id, usr2.nickname, usr2.avatar, usr1.avatar_art
    ORDER by tsp DESC

关于mysql - SQL GROUP BY 多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6973697/

相关文章:

sql - 使用一个 JOIN 次数越多,列越多

mysql - Statement.RETURN_GENERATED_KEYS 是否会生成任何额外的往返行程来获取新创建的标识符?

sql - Oracle SQL - 全部大写优先排序

MySQL:在评论字符串中搜索关键字

mysql - SQL - 如何按最小日期排序

php - WordPress MySQL 查询不工作但类似的查询工作

php - SQL查询中值为空时如何忽略AND字段=值?

php - 将所选月份与数据库中保存的日期进行比较

java - 通过 Hibernate : org. 使用 MySQL hibernate.exception.SQLGrammarException

php - mysql如何存储多个空格?