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

Mysql内部按教程问题加入组

Mysql内部按教程问题加入组,mysql,Mysql,大家好! 我想知道为什么我删除了groupbyordernumber后,它只获取一行: 这是他们的“教程”数据库错误还是MySQL行为正确?如果它是正确的,那么为什么它会产生这样的结果呢?SQL包括SUM()、COUNT()、MIN()、MAX()等等,都需要一个帧来聚合。通常,这是一个或多个要应用SUM()或其他聚合的其他列,而GROUP BY是指定该帧的方式 没有GROUP BY的聚合查询意味着您正在获取查询的WHERE子句筛选器所匹配的所有行的SUM() MySQL与大多数其他RDBMS

大家好! 我想知道为什么我删除了
groupbyordernumber
后,它只获取一行:

这是他们的“教程”数据库错误还是MySQL行为正确?如果它是正确的,那么为什么它会产生这样的结果呢?

SQL包括
SUM()、COUNT()、MIN()、MAX()
等等,都需要一个帧来聚合。通常,这是一个或多个要应用
SUM()
或其他聚合的其他列,而
GROUP BY
是指定该帧的方式

没有
GROUP BY
的聚合查询意味着您正在获取查询的
WHERE
子句筛选器所匹配的所有行的
SUM()

MySQL与大多数其他RDBMS不同,它允许您在
选择
中删除带有未聚合列的
GROUP BY
,并从查询中返回一些行集。在Oracle、MS SQL Server或Postgresql中,没有
分组依据的查询将是语法错误。如果您在
选择
列表中仍包含
状态
时使用了
按医嘱编号分组
,他们也会将其视为错误。
分组依据
应包括
选择
列表中未在聚合
总和()、计数()、最小()、最大()中使用的每一列

但MySQL对它的存在持宽容态度,相反,它会尝试猜测在哪个帧上应用您的
SUM()
聚合。有时它可以得到您实际期望的答案,但大多数时候它为非聚合列提供的值基本上是不确定的。它会将几个可能的值压缩为一个,而您无法选择得到哪一个

这就是您看到的查询结果。MySQL选择了
orderNumber=10100
status='Shipped'
来处理您的
SUM()
,即使它们与该总和没有明确的关系。结果
9604190.61
中的总和是该表中所有行的
quantityOrdered*priceEach
总和,不管
orderNumber
怎么说

因此,您的查询的最可靠版本,也是唯一一个可以在MySQL之外工作的版本,您可以实际预测结果的版本是:

SELECT 
    T1.orderNumber,
    status,
    SUM(quantityOrdered * priceEach) total
FROM
    orders AS T1
        INNER JOIN
    orderdetails AS T2 ON T1.orderNumber = T2.orderNumber
GROUP BY 
  orderNumber,
  status /* added */
;
请注意,本教程从
分组依据
中省略了
状态
,即使它位于
选择
。这在大多数其他RDBMS中都是一个错误


MySQL对这种错误特性的默认处理方式随着最新版本的出现而改变。在5.7之前,默认情况下禁用了模式,这可能会导致许多开发人员依赖于分组行为。在最新版本中,默认情况下只启用了
完整的\u GROUP\u BY
,并防止查询缺少或不完整的
GROUP BY

,只是为了观察链接引用了5.7文档,就上述参数而言,该文档是正确的,但这一论点略微忽略了当前版本。@草莓谢谢-链接指向8,并添加了一点关于当代defaultsWow的内容。非常感谢你,迈克尔!你在回答我的问题上付出了巨大的努力,我现在开始看得更清楚了,谢谢@SergejFomin很乐意帮忙,祝你好运。