Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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_Group By - Fatal编程技术网

可以选择MySQL从组返回的值吗?

可以选择MySQL从组返回的值吗?,mysql,group-by,Mysql,Group By,分组方式将记录分组组织。因此,一个组可以包含许多行,MySQL可以选择任意一行。这里有一个问题: mysql只返回第一行也许这就是它的工作原理,但不能保证。文档中说:服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的 是否可以显式选择MySQL应该返回的组行?类似于以下伪代码: SELECT * FROM `visits` GROUP BY `visitor_id` (BUT PICK UP ONLY THOSE `visits` WHERE `venue` = 3

分组方式将记录分组组织。因此,一个组可以包含许多行,MySQL可以选择任意一行。这里有一个问题:

mysql只返回第一行也许这就是它的工作原理,但不能保证。文档中说:服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的

是否可以显式选择MySQL应该返回的组行?类似于以下伪代码:

SELECT * FROM `visits` GROUP BY `visitor_id` 
(BUT PICK UP ONLY THOSE `visits` WHERE `venue` = 3)
分组方式将记录分组组织。所以一个组可以包含很多行,MySQL会选择任意一行,这是完全错误的

上面引用的说法是完全错误的! GROUPBY子句从每个组生成一条记录。它不会从组中返回行

此记录的每一列都是独立于该记录的其他列计算的。GROUPBY查询的SELECT子句中存在的每个表达式必须遵循以下三个规则之一:

它也存在于GROUP BY子句中; 它使用的列是的参数; 它是功能上依赖于GROUPBY子句中的列的列。 SELECT子句中表达式不遵循这些规则的GROUP BY SQL查询是无效的SQL

作为副作用,读取SELECT*…的查询。。。分组方式。。。是无效的SQL。它遵循上述规则的唯一方法是将表的PK放在GROUPBY子句中。但是在这种情况下,GROUPBY子句是无用的,因为GROUPBY中的PK强制每个组只有一行

在5.7.5版本之前,MySQL曾经接受过这样的无效查询,但保留了返回的权利:

服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的

从5.7.5版开始,MySQL不接受无效的SQL查询,这样做很好。其他RDBMS更紧密地实现了该标准,很久以前从未接受过此类查询或拒绝过此类查询

关于您的查询,请重新思考并重新制定您到底需要什么,而不要试图实现它—假设您从未听说过SQL

是否可以显式选择MySQL应该返回的组行[复数]

不,这是没有道理的,因为:

GROUPBY子句从每个组生成一条[单个]记录

但是,在某些情况下,可以选择从给定类别检索哪些行,但此类查询通常不涉及GROUP BY子句,或严重扭曲其预期用途

就您的示例而言,您所需要的似乎是:

SELECT * FROM visits
WHERE venue = 3
ORDER BY visitor_id

虽然技术上正确,但这不会回答问题。@它回答标题中的问题以及问题正文中的所有问题。它不提供查询来实现OP需要什么,因为OP没有解释他们需要什么。伪代码查询不提供任何规则来从每个组中选择一行,并且问题正文也不提供一行。收回向下投票,因为这个答案很有用,虽然有点超出了IMHO点。查询不会从每个组中只选择一行,即每个访客id值选择一行。是的,我很难找到正确的措辞,请随时提供帮助: