php - 获取与 MIN/MAX SUM 值关联的用户

标签 php mysql

我有这个问题:

SELECT 
    MIN(totalDuration) AS lowestTotalDuration,
    MAX(totalDuration) AS highestTotalDuration
FROM 
    (SELECT 
        SUM(totalDuration) AS totalDuration
    FROM 
        activity
    WHERE 
        active = :active
    GROUP BY 
        userID
    ) activity

但是我还想获取与每个 MIN/MAX 结果相关联的用户 ID,以便我知道哪个用户拥有最少/最多。

我尝试将 userID 添加到查询中,但它只生成 MAX 值的 userID。

数据库结构是:

userID    totalDuration    active
---------------------------------
1         0.0100           1
1         0.3000           1
2         0.2000           1
2         0.1000           1
3         0.0020           1

查询应该产生:

([lowestTotalDuration] => 0.0020
 [lowestUserID] => 3
 [highestTotalDuration] => 0.3100
 [highestUserID] => 1)

谢谢。

最佳答案

如果查询运行时间不长,只需使用union all:

(SELECT userId, SUM(totalDuration) AS totalDuration
 FROM activity
 WHERE active = :active
 GROUP BY userID  
 ORDER BY totalDuration ASC
 LIMIT 1
) UNION ALL
(SELECT userId, SUM(totalDuration) AS totalDuration
 FROM activity
 WHERE active = :active
 GROUP BY userID  
 ORDER BY totalDuration DESC
 LIMIT 1
);

如果您有更大的数据,那么您可以为此目的使用变量:

SELECT userId, totalDuration
FROM (SELECT a.*,
             (@min := if(@min = -1 or @min < totalDuration, totalDuration, @min) as minval,
             (@max := if(@max = -1 or @max > totalDuration, totalDuration, @max) as maxval       
      FROM (SELECT userId, SUM(totalDuration) AS totalDuration
            FROM activity
            WHERE active = :active
            GROUP BY userID
           ) a CROSS JOIN
           (SELECT @min := -1, @max := -1) params
      ) a
WHERE totalDuration IN (minval, maxval);

关于php - 获取与 MIN/MAX SUM 值关联的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35188640/

相关文章:

php - 从Mysql获取rowid

php - 是否可以保存通过多个 HTTPRequest 分发的数据库查询结果?

mysql - 如何将数据添加到从另一个表获取的一组列中?

c++ - qt + mysql 在另一台电脑上启动应用程序

mysql - 查询 MySQL 数据库中的用户名及其电子邮件地址

php - Mysql通过VARCHAR字段插入订单号

php - 在 Laravel 5 中调用 null 的成员函数 connection()

php - 查询返回冗余结果之间的MySQL

mysql - 我应该使用触发器来连接两个相关但高度非规范化的表吗?

mysql - Rails MySQL 连接太多