我正在尝试从MySQL
/SQL
数据库中获取特定类型的计数。该表有一列是ID的记录,第二列是另一个引用ID。一些引用ID是整数,一些引用ID中有文本。类似于此:
ID | RefID
123 | 1234567
123 | 1234568
123 | 1234569
123 | ABC/US12/12345
123 | ABC/AA12/12345
123 | ABC/BB12/12345
如果数字是整数,则表示美国。对于文本ID;ABC";部分总是相同的;AA";以及";BB";代表国家代码。有时是";US";例如";ABC/US12/1245〃;。
对于每个ID,我想为它们各自的参考ID统计一个唯一的国家。我想这将使用DISTINCT RefID
,看起来像这样:
SELECT ID, count(DISTINCT RefID)
FROM TABLE
GROUP BY ID;
除了代替简单的CCD_ 4,我希望DISTINCT相对于任何整数RefID或具有CCD_;US";,否则对于RefID,CCD_ 6应当是CCD_。因此,上述数据的计数将是3
。
有人能告诉我这种类型的函数被称为什么,或者如何实现吗?
您似乎想要这样的东西:
SELECT ID,
COUNT(DISTINCT CASE WHEN RefID REGEXP '^[0-9]+$' THEN 'US'
WHEN RefID LIKE '%/US%' THEN 'US'
ELSE RefID
END)
FROM CONTINUITYCHILD_P
GROUP BY ID;
如果您需要从其他RefID
s中提取国家/地区,则可能需要额外的逻辑。
第一个答案接近正确
实际上,要求将所有整数RefID更改为";US";,然后从所有其他RefID中提取国家代码。
以下是正确的方法:
SELECT
ID,
COUNT(DISTINCT
CASE
WHEN RefID REGEXP '^[0-9]+$' THEN 'US'
ELSE SUBSTRING(RefID, 5, 2)
END
) CountryCount
FROM TABLE
GROUP BY ID
ORDER BY CountryCount DESC;