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
解释
-
SELECT: 这是 SQL 查询的关键字,表示要从数据库中检索数据。 -
CASE WHEN ... THEN ... ELSE ... END: 这是一个条件表达式,用于根据条件选择不同的值。在这里,根据MAX(IF(type='快递',1,0))=1的结果,选择不同的code值。 -
MAX(IF(type='快递',1,0))=1: 这是一个判断条件,用于检查是否存在type为 '快递' 的记录。如果存在,则返回1,否则返回0。MAX函数用于取这些返回值的最大值,因此如果存在type为 '快递' 的记录,最终结果为1。 -
MAX(IF(type='快递',code,'')): 这是一个条件表达式,如果type为 '快递',则返回code字段的值,否则返回空字符串。 -
MAX(IF(type='自提',code,'')): 这也是一个条件表达式,如果type为 '自提',则返回code字段的值,否则返回空字符串。 -
code: 这是为了给最终结果中的这个值起一个别名,便于在结果中引用。 -
store_name: 这是要检索的另一个字段,表示商店名称。 FROM 'test_table': 这指定了查询要从名为test_table的表中检索数据。GROUP BY store_name,user_name: 这将结果按照store_name、user_name分组,以便于对每个不同的store_name应用聚合函数。、user_name

浙公网安备 33010602011771号