如何对唯一查询进行复杂计数
How to make a complex count of unique queries
我正在尝试从 MySQL
/ SQL
数据库中获取特定类型的计数。 table 有一列记录是 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 的唯一国家/地区数量。我想这将使用 DISTINCT RefID
并且看起来像这样:
SELECT ID, count(DISTINCT RefID)
FROM TABLE
GROUP BY ID;
除了我希望 DISTINCT 与 SUBSTRING(RefID, 5, 2)
= "US" 的任何整数 RefID 或 RefID 相关,而不是简单地 count(DISTINCT RefID)
,否则 DISTINCT
应该是 DISTINCT(SUBSTRING(RefID, 5, 2))
用于 RefID。所以上面数据的计数是 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
中提取国家/地区,您可能需要额外的逻辑。
第一个答案接近正确。
事实上,要求是将所有整数 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;
我正在尝试从 MySQL
/ SQL
数据库中获取特定类型的计数。 table 有一列记录是 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 的唯一国家/地区数量。我想这将使用 DISTINCT RefID
并且看起来像这样:
SELECT ID, count(DISTINCT RefID)
FROM TABLE
GROUP BY ID;
除了我希望 DISTINCT 与 SUBSTRING(RefID, 5, 2)
= "US" 的任何整数 RefID 或 RefID 相关,而不是简单地 count(DISTINCT RefID)
,否则 DISTINCT
应该是 DISTINCT(SUBSTRING(RefID, 5, 2))
用于 RefID。所以上面数据的计数是 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
中提取国家/地区,您可能需要额外的逻辑。
第一个答案接近正确。
事实上,要求是将所有整数 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;