gpt4 book ai didi

mysql - 计算(多个)MySQL 查询的重叠结果

转载 作者:行者123 更新时间:2023-11-29 12:30:59 25 4
gpt4 key购买 nike

我想在 MySQL 数据库上运行 3 个不同的 SELECT 查询:

数据库包含以下条目:

Rio      SouthAmerica
Rio startsWithR
Rio endsWithO
Rome Europe
Rome startsWithR
Rome endsWithE
Curitiba SouthAmerica
Curitiba startsWithC
Curitiba endsWithA
Recife SouthAmerica
Recife startsWithR
Recife endsWithE

现在我执行以下查询

SELECT city FROM db.tab WHERE tag="SouthAmerica"
/*Result: Rio, Curitiba, Recife */
SELECT city FROM db.tab WHERE tag="startsWithR"
/*Result: Rio, Recife, Rome */
SELECT city FROM db.tab WHERE tag="endsWithO"
/*Result: Rio */

现在我想计算一下这些查询返回城市的频率。我可以通过迭代结果来做到这一点,但我相信有更好的方法。我可以通过单个查询来完成吗?或者我需要嵌套查询吗?我喜欢得到结果:

Rio      3
Recife 2
Curitiba 1
Rome 1

最佳答案

使用union all和聚合:

SELECT city, count(*)
FROM ((SELECT city FROM db.tab WHERE tag="SouthAmerica"
) UNION ALL
(SELECT city FROM db.tab WHERE tag="startsWithR"
) UNION ALL
(SELECT city FROM db.tab WHERE tag="endsWithO"
)
) c
GROUP BY city;

实际上,我注意到所有三个子查询都来自同一个表。因此,只需使用条件聚合:

SELECT city, sum(tag in ('SouthAmerica', 'startsWithR', 'endsWithO'))
FROM db.tab
GROUP BY city;

或者,或者

SELECT city, count(*)
FROM db.tab
WHERE tag in ('SouthAmerica', 'startsWithR', 'endsWithO')
GROUP BY city;

关于mysql - 计算(多个)MySQL 查询的重叠结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27525669/

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