Mysql 如何对唯一查询进行复杂计数
我试图从Mysql 如何对唯一查询进行复杂计数,mysql,sql,distinct,Mysql,Sql,Distinct,我试图从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”代表国家代码。有
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”代表国家代码。有时是“我们”,如“ABC/US12/12345”
对于每个ID,我希望为其各自的参考ID统计唯一的国家。我猜这将使用不同的RefID
,看起来像这样:
SELECT ID, count(DISTINCT RefID)
FROM TABLE
GROUP BY ID;
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;
除了简单的count(DISTINCT RefID)
之外,我希望DISTINCT与任何整数RefID或带有子字符串(RefID,5,2)
=“US”的RefID相关,否则DISTINCT
对于RefID应该是DISTINCT(SUBSTRING(RefID,5,2))
。因此,上述数据的计数为3
有谁能告诉我这种类型的函数调用什么或如何实现吗?您似乎想要这样的东西:
SELECT ID, count(DISTINCT RefID)
FROM TABLE
GROUP BY ID;
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提取国家/地区,则可能需要其他逻辑。您似乎需要以下内容:
SELECT ID, count(DISTINCT RefID)
FROM TABLE
GROUP BY ID;
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;
第一个答案几乎是正确的。
实际上,要求将所有整数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;
DISTINCT
不是一个函数,它是一个集合量化器。删除那些额外的括号以使代码更清晰,即只需count(DISTINCT RefID)
。好的,很高兴知道这一点。我已经澄清了示例代码。DISTINCT
不是一个函数,它是一个集合量化器。删除那些额外的括号以使代码更清晰,即只需count(DISTINCT RefID)
。好的,很高兴知道这一点。我已经澄清了示例代码。