如何对唯一查询进行复杂计数



我正在尝试从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;

如果您需要从其他RefIDs中提取国家/地区,则可能需要额外的逻辑。

第一个答案接近正确
实际上,要求将所有整数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;

最新更新