Mysql 使用SQL,如何获取重复出现两次以上的列?

Mysql 使用SQL,如何获取重复出现两次以上的列?,mysql,sql,Mysql,Sql,以下是我尝试的SQL请求: SELECT COUNT(DISTINCT um.user_id) FROM wp_usermeta um LEFT JOIN wp_users u ON um.user_id = u.ID LEFT JOIN wp_posts p ON u.ID = p.post_author AND p.post_status = 'publish' AND p.post_type = 'post' WHERE p.post_date >= '2013-03-15' AND

以下是我尝试的SQL请求:

SELECT COUNT(DISTINCT um.user_id)
FROM wp_usermeta um
LEFT JOIN wp_users u ON um.user_id = u.ID
LEFT JOIN wp_posts p ON u.ID = p.post_author AND p.post_status = 'publish' AND p.post_type = 'post'
WHERE p.post_date >= '2013-03-15'
AND u.user_login NOT LIKE 'LOCKED-%'
AND um.meta_key = 'wp_capabilities'
AND um.meta_value LIKE '%writers%'
AND COUNT(um.user_id) >= 2
最后一行:

AND COUNT(um.user_id) >= 2
正在导致一些错误


有没有办法只获取至少重复出现两次或两次以上的um.user_id?

由用户分组,并使用
having
子句对每个组应用聚合函数,如
count

select count(*) from
(
    SELECT um.user_id
    FROM wp_usermeta um
    LEFT JOIN wp_users u ON um.user_id = u.ID
    LEFT JOIN wp_posts p ON u.ID = p.post_author AND p.post_status = 'publish' AND p.post_type = 'post'
    WHERE p.post_date >= '2013-03-15'
    AND u.user_login NOT LIKE 'LOCKED-%'
    AND um.meta_key = 'wp_capabilities'
    AND um.meta_value LIKE '%affiliate_pay_per_publish%'
    GROUP BY um.user_id
    HAVING COUNT(*) >= 2
) alias_name

按用户分组,并使用
having
子句在每个组上应用聚合函数,如
count

select count(*) from
(
    SELECT um.user_id
    FROM wp_usermeta um
    LEFT JOIN wp_users u ON um.user_id = u.ID
    LEFT JOIN wp_posts p ON u.ID = p.post_author AND p.post_status = 'publish' AND p.post_type = 'post'
    WHERE p.post_date >= '2013-03-15'
    AND u.user_login NOT LIKE 'LOCKED-%'
    AND um.meta_key = 'wp_capabilities'
    AND um.meta_value LIKE '%affiliate_pay_per_publish%'
    GROUP BY um.user_id
    HAVING COUNT(*) >= 2
) alias_name

基本规则:不能在
where
子句中使用聚合函数。
,其中
过滤在过滤每一行以包含到结果集中时完成。在确定所有行之前,无法使用聚合结果,因此您实际上要求DB进行时间旅行。这就是为什么
中有
子句,在计算完所有聚合结果后,这些子句会在查询链的末尾应用它们的过滤器。基本规则:不能在
where
子句中使用聚合函数。
,其中
过滤在过滤每一行以包含到结果集中时完成。在确定所有行之前,无法使用聚合结果,因此您实际上要求DB进行时间旅行。这就是为什么
中有
子句,在计算完所有聚合结果后,这些子句会在查询链的末尾应用它们的过滤器。我想知道用户的数量,这就是为什么我在select之后放置COUNT(DISTINCT um.user_id)。然后在其周围放置
select COUNT
?我以为那只是一个
——我想他们是一样的吧?另外,我认为两个查询通常比一个子查询快。@JackWilliams:您需要为每个子查询指定一个名称。我选择了
alias\u name
,但是
a
也可以。我想知道用户的数量,这就是为什么我在select之后放置COUNT(不同的um.user\u id)。然后在其周围放置
select COUNT
?我以为那只是一个
——我想他们是一样的吧?另外,我认为两个查询通常比一个子查询快。@JackWilliams:您需要为每个子查询指定一个名称。我选择了
alias\u name
,但是
a
也可以。