![]() |
1
13
在select表达式中列出字段而不使用聚合函数时,通常使用GROUP BY是无效的SQL,应引发错误。 然而,MySQL允许这样做,只需随机选择一个值。尽量避免它,因为它令人困惑。 要禁止此操作,可以在运行时说:
或者使用配置值和/或命令行选项
是的,列出两个聚合函数是完全有效的。 |
|
2
4
因为我是新来的,显然我不能发布有用的图片,所以我会尝试用文字。。。 我刚刚测试过,似乎不在GROUP BY中的字段的值将使用与groupby条件匹配的第一行的值。这也将解释其他人在选择不在GROUPBY子句中的列时所感受到的“随机性”。 例子: 创建一个名为“test”的表,其中有两列名为“col1”和“col2”,数据如下:
Col1和Col2
然后运行以下查询:
选择col1,col2
您将得到以下结果:
13个
现在考虑以下查询:
选择groupTable.col1,groupTable.col2
您将得到以下结果:
3 3个
将子查询更改为asc:
选择col1,col2
结果:
2 1个
再次使用它作为子查询的基础:
选择groupTable.col1,groupTable.col2
结果:
现在,您应该能够看到子查询的顺序如何影响为已选定但不在GROUPBY子句中的字段选择哪些值。这可以解释其他人提到的所谓“随机性”,因为如果子查询(或缺少子查询)没有与ORDERBY子句组合,那么mysql将在行进入时抓取行,但是通过在子查询中定义排序顺序,您可以控制此行为并获得可预测的结果。 |
![]() |
3
0
我认为它会根据主键或任何索引获取第一行,因为它看起来是这样工作的,但是我尝试过对各种表进行逐组查询,但没有标识任何模式。 因此,我将避免使用未分组列的任何值。 |
|
4
0
GROUPBY根据索引拾取第一条记录。假设Log_Analysis_Records_dalhouseishort表已重新编译为索引。因此,在recordID 11到16之间按11个recordID分组,得到IPAddress 129.173.159.98。但是,在某种程度上,min和max是按操作预先分组的,因此有一些值是按逻辑计算的。
|
![]() |
John Smith · Java按值对映射进行分组,其中值为列表 2 年前 |
![]() |
The Great · 拆分并存储数据帧,但名称基于特定列中的唯一值 2 年前 |
![]() |
Flo · 分组依据中的SQL大小写 2 年前 |
![]() |
user13663655 · 我可以使用条件分组并返回源类型值吗 2 年前 |
![]() |
pinkiBet · 使用MAX和UNION分组,还是加入? 2 年前 |
![]() |
lugger1 · 如何获取Postgres中时间间隔的平均值 6 年前 |