如果没有GROUP BY子句,混合GROUP列(MIN(),MAX(),COUNT(),...)没有GROUP列是非法的

时间:2016-09-03 17:59:00

标签: mysql sql group-by

我确信这曾经奏效。

SELECT first_name, surname, id, time, MIN(timeinmilliseconds) FROM users WHERE team= '$key'

我不知道在何处或为何使用GroupBy条款。

3 个答案:

答案 0 :(得分:0)

从未奏效

SELECT first_name, surname, id, time, MIN(timeinmilliseconds) 
FROM users 
WHERE team = '$key'
GROUP BY id, first_name, surname, time

我不知道它会产生你想要的东西,但它应该运行

答案 1 :(得分:0)

函数MIN(),MAX(),COUNT(),SUM(),AVG()是sql中用于对结果集进行分组的聚合函数。 根据语法,您需要在group by子句中提及要应用聚合函数的列。

在您的查询中,您正在使用MIN()函数找出针对所选列的最短时间(以毫秒为单位)。所以它应该遵循如下语法。

        SELECT first_name, surname, id, time, MIN(timeinmilliseconds) 
        FROM users 
        WHERE team= '$key'
        GROUP BY first_name,surname,id,time

希望这能清除你的疑虑。

答案 2 :(得分:0)

  

SQL92及更早版本不允许选择列表的查询,   HAVING条件或ORDER BY列表指的是非聚合列   既不在GROUP BY子句中命名,也不在功能上   依赖于(唯一确定的)GROUP BY列。例如,   此查询在标准SQL92中是非法的,因为非聚合名称   选择列表中的列不会出现在GROUP BY:

SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o, customers AS c
WHERE o.custid = c.custid
GROUP BY o.custid;
  

查询到   在SQL92中是合法的,必须从select中省略name列   列出或在GROUP BY子句中命名。

     

SQL99及更高版本允许每个可选功能T301使用此类非聚合   如果它们在功能上依赖于GROUP BY列:如果是这样的话   name和custid之间存在关系,查询是合法的。这个   例如,将custid作为主键   客户。

     

MySQL 5.7.5及更高版本实现了对功能依赖的检测。如果   启用ONLY_FULL_GROUP_BY SQL模式(默认情况下是这样),   MySQL拒绝选择列表,HAVING条件或的查询   ORDER BY列表引用既未命名的非聚合列   GROUP BY子句在功能上也不依赖于它们。 (之前   5.7.5,MySQL不检测功能依赖性,默认情况下不启用ONLY_FULL_GROUP_BY。有关的描述   5.7.5之前的行为,参见MySQL 5.6参考手册。)

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

当没有group by时,没有功能依赖的列。您可能希望子查询获取min(timeinmilliseconds)的值。