mysql中order by和分组能一起使用么

糟糕,你提到的 MySQL GROUP BY 和 ORDER BY 一起使用了。
当我开始构建数据库时,我确实遇到了很多陷阱。
让我告诉你一个真实的故事。

那时我正在管理一家电子商务支持提供商。
用户问我想要什么,他们要查看每个区域有多少订单,我必须按照从多到少的顺序排列。
我写了SQL。
我一激动,在ORDER BY后面加上了字段名,结果却报错。
身后的男人紧张得满头大汗。
当我看到它时,天哪,ORDER BY 之后的列没有出现在 GROUP BY 中,我不得不使用非合并列。
我很快就改了,并将区名称添加到 GROUP BY 中,然后就成功了。
你看,这是一个常见的错误,记住。
还有一次,在一个大型项目中,数据量达到数百万,用户必须按照总销售额和平均评分进行排序。
我写了SQL,首先GROUP BY产品id,然后ORDER BY总销售额按降序排列,平均排名按升序排列。
结果跑了半天,表现极其糟糕。
后来我检查了一下,发现 Total Sales 和 Average Rank 列没有索引。
这时我才意识到,会写SQL还不够,还需要懂一些索引。
你看,海量数据,没有索引,真的是致命的。

因此,GROUP BY和ORDER BY使用起来非常方便,但是要注意:
1 . ORDER BY 之后的列出现在 GROUP BY 中或者是聚合函数的结果。
你必须尊重这一点,否则语法将是错误的。
2 .排序的顺序,升序还是降序,一定要写清楚,否则默认是向上,有时结果会和你期望的不一样。
3 .当数据量很大时,不建立索引就无法处理。
当时我就因为这个被老板骂了。
快点,快点,快点!添加。

你看,然后我慢慢地穿过这些小洞。
如果你牢记这些要点,你就不会犯同样的错误。

group by分组后每组显示几条数据

这就是危险:GROUP BY 默认情况下不显示多条记录。
不要相信:GROUP BY 的默认行为是不显示多条记录。
不要这样做:如果要显示多条记录,请使用 GROUP_CONCAT()、子查询 + LIMIT 或 ROW_NUMBER()。

mysql的any_value()函数有版本兼容问题?

哎呀,说起MySQL的“any_value()”函数,我当年确实遇到了很多坑。
我记得那是大约1 5 年前的事了。
当时我在一家小公司从事数据库维护工作。
当时,该公司使用的是 MySQL 5 .6 版本。
当时,我们其中一个人,也就是我们技术不太好的同事,写了一个查询,结果是“GROUP BY子句或聚合函数中没有使用该列”的错误。

我当时看到的时候,这玩意怎么就报错了?查了资料发现这个问题是MySQL模式ONLY_FULL_GROUP_BY导致的。
我当时就很困惑,这个模式是什么意思?后来我又检查了一下,发现any_value()函数可以解决这个问题。

我当时很兴奋,心想如果这个东西能解决我同事的查询问题就好了。
我尝试之后,确实解决了。
不过,我当时也发现了一个问题,就是any_value()函数。
仅在 MySQL 5 .7 .5 及更高版本中可用。
我当时心情非常郁闷,正在思考如何应对。
我公司使用的MySQL版本不支持该功能。

后来我跟公司领导说我们需要更新数据库版本,不然以后就得自己想办法解决这个问题了。
领导听了,觉得有道理,让我们升级。
升级后,如果我们再次使用any_value()函数,查询会顺畅很多。

这件事给我留下了深刻的印象。
如果以后遇到类似的问题,我知道需要先检查MySQL版本,然后再决定如何解决问题。
虽然这个any_value()函数使用起来很方便,但是需要注意版本兼容性。
说起来,这次数据库维护确实很繁琐,但是我学到了很多东西。