如何在单表SQL中基于多个列值查找记录计数

如何在单表SQL中基于多个列值查找记录计数,sql,Sql,我想计算一下这个表中至少有三个不同国家代码的行数 在此示例中,对于ID=1,只有两个不同的国家代码,但是对于ID=2和3,分别有3个(美国、英国、PK)和4个(美国、英国、PK、IND)不同的国家代码。因此,结果应该是2 我怎样才能得到这个。任何建议。提前感谢如果想要至少有3个不同的意思,那么只有一个可以相等,所以 +----+---------------+--------------+---------------+--------------+ | ID | Country CodeR |

我想计算一下这个表中至少有三个不同国家代码的行数

在此示例中,对于ID=1,只有两个不同的国家代码,但是对于ID=2和3,分别有3个(美国、英国、PK)和4个(美国、英国、PK、IND)不同的国家代码。因此,结果应该是2


我怎样才能得到这个。任何建议。提前感谢

如果想要至少有3个不同的意思,那么只有一个可以相等,所以

+----+---------------+--------------+---------------+--------------+
| ID | Country CodeR | CountryCodeB | CountryCodeBR | CountryCodeF |
+----+---------------+--------------+---------------+--------------+
|  1 | US            | US           | US            | UK           |
|  2 | US            | UK           | US            | PK           |
|  3 | US            | UK           | PK            | IND          |
+----+---------------+--------------+---------------+--------------+
因此,要获得只有一个重复项的行,您需要

 X  - Y  - Z  - {X,Y,Z}

如果您有多个重复项,则总数将小于0。

请不要使用不适用于您的问题的标记。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请仅添加您实际使用的数据库的标记对不起,您是否也可以发布有问题的帖子,您希望此表上的SQL结果是什么?我不理解你问题的第一句话。给我们展示数据库模式、样本数据、当前和预期输出。请阅读,这里是一个学习如何提高问题质量和获得更好答案的好地方。什么是3?2是什么?你会说英语吗?@Gnudiff,对不起,我的英语很差。我有上表,从上表我想要记录计数,它有四个国家代码列中的三个不同的国家代码。hop u伙计们从上面的查询中得到了我的问题,它有性能问题。我们是否可以通过使用自连接实现任何功能?解释为什么会出现性能问题?有几排?一个自连接也会很大。您可以取消激活该表,但没有为优雅的解决方案指定RDBMS+1。我最初的想法是连接列并使用regexp计算匹配数。请注意,如果这是MySQL,您需要在每个案例的结尾使用“END”。如果您需要它更快,也许您需要在WHERE子句中的列上创建索引。@Gnudiff实际上我认为您需要使用
case
END
每个数据库。我只是错过了。
SELECT COUNT(*)  -- or * for debug
FROM yourTable
WHERE 1 - (CASE WHEN CountryCodeR  = CountryCodeB  THEN 1 ELSE 0 END )
        - (CASE WHEN CountryCodeR  = CountryCodeBR THEN 1 ELSE 0 END )
        - (CASE WHEN CountryCodeR  = CountryCodeF  THEN 1 ELSE 0 END )
        - (CASE WHEN CountryCodeB  = CountryCodeBR THEN 1 ELSE 0 END )
        - (CASE WHEN CountryCodeB  = CountryCodeF  THEN 1 ELSE 0 END )
        - (CASE WHEN CountryCodeBR = CountryCodeF  THEN 1 ELSE 0 END ) >= 0