gpt4 book ai didi

mysql - 过滤表中的记录,这些记录在四个国家代码列中至少有三个具有不同的国家代码

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:15 25 4
gpt4 key购买 nike

我有一个小问题

+----+---------------+--------------+---------------+--------------+
| ID | Country CodeR | CountryCodeB | CountryCodeBR | CountryCodeF |
+----+---------------+--------------+---------------+--------------+
| 1 | US | US | US | UK |
| 2 | US | UK | US | PK |
| 3 | US | UK | PK | IND |
+----+---------------+--------------+---------------+--------------+

来自上表从上表中筛选出至少有四个国家代码列中的三个不同国家代码列的记录

从上表我需要的结果应该如下所示

+----+---------------+--------------+---------------+--------------+
| ID | Country CodeR | CountryCodeB | CountryCodeBR | CountryCodeF |
+----+---------------+--------------+---------------+--------------+
| | | | | |
| 2 | US | UK | US | PK |
| 3 | US | UK | PK | IND |
+----+---------------+--------------+---------------+--------------+

最佳答案

您当前的数据结构使您的查询变得困难,因为 count distinct 函数对而不是列进行操作。一种方法是将您的数据转换为 tall 格式,然后按 ID 聚合:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
SELECT ID
FROM
(
SELECT ID, CountryCodeR AS CountryCode FROM yourTable
UNION ALL
SELECT ID, CountryCodeB FROM yourTable
UNION ALL
SELECT ID, CountryCodeBR FROM yourTable
UNION ALL
SELECT ID, CountryCodeF FROM yourTable
) t
GROUP BY ID
HAVING COUNT(DISTINCT CountryCode) >= 3
) t2
ON t1.ID = t2.ID;

以上可能是您在 MySQL 上可以做的最好的事情。如果您使用的是 Oracle,那么您将拥有诸如 unpivot 和 CTE 之类的东西来实现更美观的查询。

Demo

关于mysql - 过滤表中的记录,这些记录在四个国家代码列中至少有三个具有不同的国家代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47217637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com