计算子查询中的行数

Posted

技术标签:

【中文标题】计算子查询中的行数【英文标题】:Counting rows from a subquery 【发布时间】:2011-07-18 06:40:00 【问题描述】:

如何将 SELECT 查询中的行数计为值? 比如

SELECT FUCNTIONIMLOOKINGFOR(SELECT * FROM anothertable) AS count FROM table;

所以该计数是子查询SELECT * FROM anothertable 返回的行数的整数。

编辑

SELECT p.PostPID, p.PostUID, p.PostText, p.PostTime, u.UserUID, u.UserName, u.UserImage, u.UserRep,
    (
        SELECT COUNT(f.FlagTime)
            FROM Flags as f 
                JOIN Posts as p 
                ON p.PostPID = f.FlagPID
    ) as PostFlags
    FROM Posts AS p
        JOIN Users AS u
        ON p.PostUID = u.UserUID
    ORDER BY PostTime DESC
    LIMIT 0, 30

【问题讨论】:

@Charlie - 不确定您是否收到错误,但您是否在 (SELECT ...) 之前缺少逗号作为 PostFlags? @Charlie - 我不确定 v.FlagTime 中的“v”指的是什么,你没有任何用 v 标记的连接,那么 f.FlagTime 呢? @Charlie - 所以一切都修复了吗? 【参考方案1】:
SELECT ( SELECT COUNT(id) FROM aTable ) as count FROM table

我假设您的示例是实际查询的截断版本,因此也许您应该发布您所追求的内容以获得可能更优化的查询。

编辑

直接从我的大脑中工作,这样的事情应该更优化。

SELECT p.PostPID, p.PostUID, p.PostText, p.PostTime, u.UserUID, u.UserName, u.UserImage, u.UserRep, COUNT(v.FlagTime) as postFlags
    FROM Flags as f 
    JOIN Posts as p ON p.PostPID = f.FlagPID
    JOIN Users AS u ON p.PostUID = u.UserUID
LIMIT 0, 30
GROUP BY p.PostPID
ORDER BY PostTime DESC

【讨论】:

如果不是所有帖子都有标记,这将排除那些没有标记的帖子。如果是这种情况,请执行from posts left join Flags...【参考方案2】:

你可以说

SELECT COUNT(*) FROM anothertable

这将返回一个数值,您可以在另一个查询中使用它,例如在另一个查询的选择列表中,或作为另一个查询中的条件。

SELECT someVariable FROM table
WHERE (SELECT COUNT(*) FROM anotherTable) > 5

SELECT someVariable, (SELECT COUNT(*) FROM anotherTable) as count FROM table

【讨论】:

我更新了我的帖子。但是子查询似乎在没有连接的情况下执行。 谢谢!第二个例子很有帮助

以上是关于计算子查询中的行数的主要内容,如果未能解决你的问题,请参考以下文章

Postgres:计算子查询中的唯一数组条目

使用主查询的字段计算子查询中的字段

SQL连接表的最大数量限制是适用于整个查询,还是单独计算子查询?

从当前查询中减去子查询中的行数

如何使用 ucanaccess 获取查询中的行数

如何限制查询中返回的组数,而不是 Oracle 中的行数