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