SQL - 我需要查看有多少用户与一组特定的 ID 相关联
SQL - I need to see how many users are associated with a specific set of ids
我正在尝试从另一个 table 中识别所有具有相同 ID 集的用户列表。
我有用户 1、2、3 和 4,所有这些用户都可以拥有列表 A、B、C 和 D 中的多个 ID。我需要查看列表一中有多少用户只有 3 个 ID,并且这三个 ID 必须匹配(因此列表一中有多少用户只有 A、B 和 C,但没有 D)。
我可以确定哪些用户拥有哪些 ID,但我不太清楚如何知道有多少用户具体拥有一组特定的 ID
这是我正在使用的 SQL,但计数看起来不正确。我已经确定大约有 7k 用户恰好有 16 个 ID(任何类型),但是当我尝试使用此 sql 来计算一组特定的 16 个 ID 时,我得到的计数是 15k。
select
count(user_id)
from
(
SELECT
user_id
FROM user_id_type
where user_id_type not in ('1','2','3','4','5')
GROUP BY user_id
HAVING COUNT(user_id_type)='16'
)
所以你想要用户有 3 个 ID,只要其中一个 ID 不是 D。怎么样;
select user
from table
group by user
having count(*) = 3 and max(ID) <> 'D'
HAVING 子句在这种情况下很有用。只要排除的 ID 是最大值(或最小值的简单更改),此方法就会起作用。
根据您的评论,如果 min/max(ID) 方法不可行,那么您可以使用 NOT IN;
select user
from table
where user not in (select user from table where ID = 'D')
group by user
having count(*) = 3
根据更新后的问题,如果我正确理解了初始示例与现实之间的映射,那么查询应该是这样的;
SELECT user_id
FROM user_id_type
WHERE user_id not in (select user_id from user_id_type where user_id_type in ('1','2','3','4','5'))
GROUP BY user_id
HAVING COUNT(user_id_type)='16'
奇怪的是,您似乎同时拥有 table 和 table 中同名的列 'user_id_type'。这不是最清晰的设计。
我正在尝试从另一个 table 中识别所有具有相同 ID 集的用户列表。
我有用户 1、2、3 和 4,所有这些用户都可以拥有列表 A、B、C 和 D 中的多个 ID。我需要查看列表一中有多少用户只有 3 个 ID,并且这三个 ID 必须匹配(因此列表一中有多少用户只有 A、B 和 C,但没有 D)。
我可以确定哪些用户拥有哪些 ID,但我不太清楚如何知道有多少用户具体拥有一组特定的 ID
这是我正在使用的 SQL,但计数看起来不正确。我已经确定大约有 7k 用户恰好有 16 个 ID(任何类型),但是当我尝试使用此 sql 来计算一组特定的 16 个 ID 时,我得到的计数是 15k。
select
count(user_id)
from
(
SELECT
user_id
FROM user_id_type
where user_id_type not in ('1','2','3','4','5')
GROUP BY user_id
HAVING COUNT(user_id_type)='16'
)
所以你想要用户有 3 个 ID,只要其中一个 ID 不是 D。怎么样;
select user
from table
group by user
having count(*) = 3 and max(ID) <> 'D'
HAVING 子句在这种情况下很有用。只要排除的 ID 是最大值(或最小值的简单更改),此方法就会起作用。
根据您的评论,如果 min/max(ID) 方法不可行,那么您可以使用 NOT IN;
select user
from table
where user not in (select user from table where ID = 'D')
group by user
having count(*) = 3
根据更新后的问题,如果我正确理解了初始示例与现实之间的映射,那么查询应该是这样的;
SELECT user_id
FROM user_id_type
WHERE user_id not in (select user_id from user_id_type where user_id_type in ('1','2','3','4','5'))
GROUP BY user_id
HAVING COUNT(user_id_type)='16'
奇怪的是,您似乎同时拥有 table 和 table 中同名的列 'user_id_type'。这不是最清晰的设计。