mysql:用join替换“groupby”

z9smfwbn  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(334)

我现在正在开发一个laravel项目,我必须处理一些sql的东西。
因为我想让mysql保持严格模式,所以我必须用一个没有“groupby”的查询替换下面的查询。我读过,我可以通过连接达到这个目的,但我真的不知道如何在这个例子中做到这一点。
首先,这里是我的示例表“水果”。请不要介意冗余,我得到的数据如下:

fruitName     | fruitModel
--------------------------
Banana (Nr 1) | Banana
Banana (Nr 2) | Banana
Banana (Nr 3) | Banana
Apple (Nr 1)  | Apple
Apple (Nr 2)  | Apple
Strawberry    | Strawberry
Banana (Nr 4) | Banana

我想得到下表:

fruitName     | fruitModel
--------------------------
Banana (Nr 1) | Banana
Apple (Nr 1)  | Apple
Strawberry    | Strawberry

所以对于每个水果模型,我都想有一个水果名。这与我的名字无关。这样的结果也可以:

fruitName     | fruitModel
--------------------------
Banana (Nr 3) | Banana
Apple (Nr 2)  | Apple
Strawberry    | Strawberry

我有一个查询,可以很好地实现这一点,但是我必须构建一个没有“groupby”部分的查询,因为在严格模式下,每个选中的列都必须显示在“groupby”中。以下是我当前的查询:

SELECT fruitModel, fruitName FROM fruits GROUP BY fruitModel

有没有人知道如何用一些join的东西来代替“groupby”部分?谢谢您。

whitzsjs

whitzsjs1#

GROUP BY 很好,因为您确实需要每个水果的聚合模型。只是你忘了对水果名称应用聚合函数。使用 ANY_VALUE 为此:

SELECT fruitModel, ANY_VALUE(fruitName) AS fruitName FROM fruits GROUP BY fruitModel;
``` `ANY_VALUE` 告诉dbms您对该组的任何值都满意。
(正如你还标记了mariadb:我不认为mariadb `ANY_VALUE` . 因此,对于这个dbms,只需使用 `MIN` 或者 `MAX` 相反。)

相关问题