首页 > 解决方案 > 如何使用MySql根据表中的偏好顺序选择行值

问题描述

我有一个表作为 data_attributes 列 data_type

SELECT * FROM DATA_ATTRIBUTES;

DATA_TYPE
----------
NAME
MOBILE
ETHINICITY
CC_INFO
BANK_INFO
ADDRESS

Bank_info, CC_info 归类为 Risk1,

移动,种族分类为 Risk2,

姓名、地址归类为 Risk3

我应该得到风险分类作为输出,

例如:如果任何行包含 Risk1 类型,则输出应为 Risk1,否则,如果任何行包含 Risk2 类型,则输出应为 Risk2,否则如果任何行包含 Risk3 类型,则输出应为 Risk3

我为此写了下面的查询

SELECT COALESCE(COL1,COL2,COL3) FROM
(SELECT 
CASE WHEN DATATYPE IN ('BANK_INFO','CC_INFO') THEN 'RISK1' ELSE NULL END AS COL1, 
CASE WHEN DATATYPE IN ('MOBILE','ETHINICITY') THEN 'RISK2' ELSE NULL END AS COL2,
CASE WHEN DATATYPE IN ('NAME','ADDRESS') THEN 'RISK3' ELSE NULL END AS COL3
FROM DEMO.TPA_CLASS1) A; 

所需的输出是:Risk1(只有 1 个值)

请给出一些想法来实现这一点。

标签: mysql

解决方案


您可以使用条件聚合:

SELECT 
  CASE 
    WHEN MAX(DATATYPE IN ('BANK_INFO','CC_INFO')) = 1 THEN 'RISK1'
    WHEN MAX(DATATYPE IN ('MOBILE','ETHINICITY')) = 1 THEN 'RISK2'
    WHEN MAX(DATATYPE IN ('NAME','ADDRESS')) = 1 THEN 'RISK3'
  END AS RISK
FROM DEMO.TPA_CLASS

推荐阅读