情景:
在某些系统设计中,多个含义的数据可能不是用多个字段去表示的,而是通过一个类型字段和值去存储,
例如:某个系统中有多种金额类型,那么可能是通过三个字段进行存储:订单号、金额种类、金额。
在进行查询的时候可能需要同时取出几种类型的数据。一般的做法是将改订单的各个种类数据都取出来,在后台使用代码拼接,但是其实还有一种方法。使用聚合和case来实现。
参考方法:
数据表结构
现有一个翻译表 translate,有三个字段:key,language、translate,分别表示:键,语言、翻译结果。
需求
现在要同时查出某个键的繁体中文和英文,并显示在一行,可以通过下面的方法实现:
SQL语句
# 将 translate 列按照语种分为两列显示
SELECT
`key`,
GROUP_CONCAT((case when language = 'zh_HK' then translate ELSE null END)) as '繁体中文',
GROUP_CONCAT((case when language = 'en_US' then translate ELSE null END)) AS '英文'
FROM `translate`
GROUP BY `key`
实现效果
注意:此方法未做大数据性能测试,生产环境请自行测试。
原文链接:https://blog.csdn.net/yueguangMaNong/article/details/122621165