Skip to main content
 首页 » 编程设计

mysql之如何在Mysql中为GROUP BY定义自己的聚合函数

2024年02月23日16jackei

我有一个 products 表,其中包含不同语言的产品名称:

product-id | lang-no | name 

我想将每个产品列出一次,但使用不同的语言名称。

我没有所有产品名称的所有语言,因此有时我不得不求助于另一种语言。

选择我使用的数字最小或最大的语言

SELECT * FROM products JOIN 
(SELECT product-id, MIN(lang-no) AS minlang FROM products GROUP BY product-id) 
AS u ON products.product-id = u.product-id AND products.lang-no=minlang 

但现在我需要定义另一个聚合函数而不是 MIN 或 MAX,因此我可以更喜欢 lang-no 3。

我如何在Mysql中定义我自己的聚合函数,例如。一些 IF 逻辑?

请您参考如下方法:

您可以将 case 与聚合一起使用来指定返回哪个值(如果存在)以及如果不存在最小值(或最大值):

select p.* 
from products p 
join ( 
    select product_id, 
        case  
            when sum(lang_no = 3) > 0 
                then 3 
            else min(lang_no) 
            end as min_lang_no 
    from products 
    group by product_id 
    ) p2 on p.product_id = p2.product_id 
    and p.lang_no = p2.min_lang_no