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