Mysql 分组合并数据,优先取值经典案例

需求一:根据店铺名称、运营进行归并合并,如果存在多条合并的数据,优先取配送方式配送、自提的code值

SELECT
    CASE WHEN MAX(IF(type='快递',1,0))=1
    THEN MAX(IF(type='快递',`code`,''))
    else MAX(IF(type='自提',`code`,'')) end code,
    store_name
FROM
    `test_table`
    GROUP BY store_name,user_name

解释

  1. SELECT: 这是 SQL 查询的关键字,表示要从数据库中检索数据。

  2. CASE WHEN ... THEN ... ELSE ... END: 这是一个条件表达式,用于根据条件选择不同的值。在这里,根据 MAX(IF(type='快递',1,0))=1 的结果,选择不同的 code 值。

  3. MAX(IF(type='快递',1,0))=1: 这是一个判断条件,用于检查是否存在 type 为 '快递' 的记录。如果存在,则返回 1,否则返回 0MAX 函数用于取这些返回值的最大值,因此如果存在 type 为 '快递' 的记录,最终结果为 1

  4. MAX(IF(type='快递',code,'')): 这是一个条件表达式,如果 type 为 '快递',则返回 code 字段的值,否则返回空字符串。

  5. MAX(IF(type='自提',code,'')): 这也是一个条件表达式,如果 type 为 '自提',则返回 code 字段的值,否则返回空字符串。

  6. code: 这是为了给最终结果中的这个值起一个别名,便于在结果中引用。

  7. store_name: 这是要检索的另一个字段,表示商店名称。

  8. FROM 'test_table': 这指定了查询要从名为 test_table 的表中检索数据。
  9. GROUP BY store_name,user_name: 这将结果按照 store_name、user_name 分组,以便于对每个不同的 store_name、user_name  应用聚合函数。

 

posted @ 2024-03-28 11:51  陈彦斌  阅读(33)  评论(0编辑  收藏  举报