mysql计算不重叠的UNION结果

标签 mysql count duplicates union

好的,我有疑问

(SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
 LIMIT 0, 30

我将使用 COUNT(*) 无限制地运行相同的操作

(SELECT COUNT(*) FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT COUNT(*) FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT COUNT(*) FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)

本质上我想做的是获取总结果数(无限制),并获取有限列表。

我遇到的问题是,当我运行计数查询时,我得到的数字比返回的结果更大。我猜测这样做的原因是当我得到结果时,它会过滤掉所有重叠的行,因为计数只计算每个行,因为我必须手动添加它们。

关于如何清理整个过程有什么想法吗?

另外,请注意 select 语句的数量会动态变化,但我希望有一种方法可以获得重复项的总体计数。

谢谢。

最佳答案

伯爵这个怎么样:

SELECT COUNT(DISTINCT Id)
FROM (SELECT Id From jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) 
      UNION
      SELECT Id From jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) 
      UNION
      SELECT Id From jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?)) t

这应该为您提供唯一的计数,并且还请注意,我删除了 order by,因为它不值得计算计数查询。

关于mysql计算不重叠的UNION结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640344/

相关文章:

r - 计算 R 中数据帧行中特定单词的出现次数

track_total_hits 设置为 true 的 ElasticSearch Count API 与 SearchAPI

PHP MySQL : Go through each row, 并计算有多少列满足条件

java - 删除 ArrayList Java 中的重复元素

R:自动计算秩和

MySQL - 根据列子集重复删除行

php - 数据库结构跟踪用户是否打开特定内容的最佳实践?

python - PyMySQL INSERT INTO 查询忽略/切断未运行的查询

php - 将输入的信息发送到数据库中的 MySQL 表的 HTML 表单

mysql - sql选择现在之前的最大日期