任何价值()
SELECT item.item_id, ANY_VALUE(uses.tag) tag,
COUNT(*) number_of_uses
FROM item
JOIN uses ON item.item_id, uses.item_id
GROUP BY item.item_id
显示名为 item
的表中的行,相关行的计数以及相关表中名为 uses
的值之一。
你可以把这个 ANY_VALUE()
函数想象成一种奇怪的聚合函数。它不是返回计数,总和或最大值,而是指示 MySQL 服务器从所讨论的组中任意选择一个值。这是一种解决错误 1055 的方法。
在生产应用程序中的查询中使用 ANY_VALUE()
时要小心。
它应该被称为 SURPRISE_ME()
。它返回 GROUP BY 组中某行的值。它返回哪一行是不确定的。这意味着它完全取决于 MySQL 服务器。形式上,它返回一个不可预测的值。
服务器不选择随机值,它比这更糟糕。每次运行查询时它都返回相同的值,直到它没有。当表增长或缩小,或者服务器具有更多或更少的 RAM,或者服务器版本发生变化,或者火星逆行时(无论这意味着什么),或者根本没有任何理由,它可以改变或不改变。
你被警告了。