繁体   English   中英

如何计算SQL联合中的不同值?

[英]How to count distinct values in SQL union?

我可以从两个不同的列中选择不同的值,但不知道如何计算它们。 我的猜测是我应该使用别名,但无法弄清楚如何正确地写出语句。

$sql =  "SELECT DISTINCT author FROM comics WHERE author NOT IN 
                ( SELECT email FROM bans ) UNION
                SELECT DISTINCT email FROM users WHERE email NOT IN 
                ( SELECT email FROM bans ) ";

Edit1:我知道我可以在php中使用mysql_num_rows() ,但我认为这需要太多的处理。

您可以将查询包装在子查询中:

select  count(distinct author)
from    (
        SELECT  author
        FROM    comics 
        WHERE   author NOT IN ( SELECT email FROM bans ) 
        UNION ALL
        SELECT  email 
        FROM    users 
        WHERE   email NOT IN ( SELECT email FROM bans )
        ) as SubQueryAlias

查询中有两个distinct s, union过滤掉重复的内容。 我删除了所有三个(非不同的联合是union all )并使用count(distinct author)将清晰度移动到外部查询。

您总是可以执行SELECT COUNT(*) FROM (SELECT DISTINCT...) x ,只需将UNION复制到第二个SELECT (更确切地说,它称为匿名视图)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM