mysql group by 查询的字段如果不用聚合函数,是怎么保留的?

勁艸洳颩 2018-04-21 11:07:10
如题,如果mysql数据库中有一个表table,字段分别有a、b、c、d,想根据字段a分组,然后显示每组的第一条,sql语句格式为:select a,MIN(b),c,d from table group by a。
在sql查询的结果集中,b字段可以取到最小值,那么c和d字段是取?

数据内容
a b c d
1 1 1 1
1 2 2 2
1 3 3 3


以上数据内容从mysql数据库直接查询,结果集为:1、1、1、1,但是从代码里查询,返回的结果集是:1,1,3,3。

求大神解惑!!!
...全文
3226 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AHUA1001 2018-05-03
  • 打赏
  • 举报
回复
SELECT a,b,c,d FROM TABLE WHERE (a,CONCAT(b,c,d)) IN (SELECT a,MIN(CONCAT(b,c,d)) bcd FROM TABLE GROUP BY a)
骏马金龙 2018-04-26
  • 打赏
  • 举报
回复
如果你想按照标准SQL来理解,自然更好(这也表示同时理解了SQL SERVER,ORACLE的SQL语法,因为它们在SQL规范化上严格遵守SQL标准)。 但SQL规范既然是为了标准而定的,自然是可以违反的,毕竟MySQL也有它自己的"个性"。只要你知道这么做对你的需求不造成影响(特别是增删改语句),那就无所谓啊。
勁艸洳颩 2018-04-26
  • 打赏
  • 举报
回复
引用 2 楼 a905815661 的回复:
按照group by上一个过程的得到的结果集中的第一行。这个第一行是按照物理存储顺序的第一行,是随机不可预测的。 当数据group by后,上下文会切换为每个组而不再是每行。因此,标准SQL中,select字段列表中无法使用非分组字段,因为违反了关系模型的范式。 在mysql中,对标准SQL的GROUP BY进行了扩展(换句话说,违反了关系模型的范式),select字段列表中可以使用非分组字段。 http://www.cnblogs.com/f-ck-need-u/p/8656828.html
谢谢回答,按文中的意思,虽然mysql对group by进行了扩展,但是不按sql规范写的sql语句执行的结果是不可预知,随机的,所以最好还是按照sql规范写语句,是这样吧?
勁艸洳颩 2018-04-26
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
select a,MIN(b),MIN(c),MIN(d) from table group by a
谢谢回答,但是这个不对,其他字段不一定是最大或最小值,也不能使用其他聚合函数
oyljerry 2018-04-22
  • 打赏
  • 举报
回复
select a,MIN(b),MIN(c),MIN(d) from table group by a
骏马金龙 2018-04-22
  • 打赏
  • 举报
回复
按照group by上一个过程的得到的结果集中的第一行。这个第一行是按照物理存储顺序的第一行,是随机不可预测的。 当数据group by后,上下文会切换为每个组而不再是每行。因此,标准SQL中,select字段列表中无法使用非分组字段,因为违反了关系模型的范式。 在mysql中,对标准SQL的GROUP BY进行了扩展(换句话说,违反了关系模型的范式),select字段列表中可以使用非分组字段。 http://www.cnblogs.com/f-ck-need-u/p/8656828.html

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧