MySQL - 将这两个查询与连接或子查询连接在一起?

标签 mysql query-optimization greatest-n-per-group

此查询返回我需要的数据,给定一个特定的 traceid 值(在本例中为 50,这是存在于两个表 tblResults 中的键tblTraces:

SELECT count(changed)
FROM (
    SELECT changed
    FROM tblResults
    WHERE traceid = 50
    AND changed = 1
    ORDER BY resultid DESC
    LIMIT 0,20
) as R

我想对几乎每个 traceid 运行上述查询(因此,为每个 traceid 选择 20 行,而不仅仅是 traceid 50,所以 3 个 traceid 意味着 60 行).下面这个简单的选择获取所需的 traceid 值:

SELECT `traceid` FROM `tblTraces` WHERE `enabled` = 1

如何将两个查询“粘合”在一起?

所以我想象一个像下面这样的查询,除了它不会工作,因为子查询返回多行(我想要的):

SELECT count(changed)
FROM (
    SELECT changed
    FROM tblResults
    WHERE traceid = (
                     SELECT `traceid` FROM `tblTraces` WHERE `enabled` = 1
                    )
    AND changed = 1
    ORDER BY resultid DESC
    LIMIT 0,20
) as R

最佳答案

虽然我对这个答案不满意,但对于较小的表来说它可能是最简单的:

SELECT tblTraces.traceid, LEAST(20, SUM(tblResults.changed))
FROM tblTraces
    LEFT JOIN tblResults
    ON tblTraces.traceid = tblResults.traceid
WHERE tblTraces.enabled = 1
AND tblResults.traceid.changed = 1
GROUP BY tblTraces.traceid

列的限制确实使连接变得复杂。

关于MySQL - 将这两个查询与连接或子查询连接在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15591606/

相关文章:

php - 在 PHP 中添加时间

sorting - Hive 数据记录的顺序是否对连接表很重要

sql - 如何使 SQL 符合 zIIP 处理的条件?

sql - T-SQL : Selecting Column Based on MAX(Other Column)

mysql - 如何选择嵌套子查询连接中的最后一个 N?

sql - Mysql选择分组

mysql - MariaDB/MySQL : Get checksum of InnoDB table

mysql - 在 Rails 中检查 boolean 值的正确方法

c# - 在 mysql 连接上“使用”

mysql - 查询优化(MySql/Sql): Moving functions out of where clause