【问题标题】: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 - 所以一切都修复了吗?

标签: mysql sql subquery


【解决方案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

【讨论】:

  • 我更新了我的帖子。但是子查询似乎在没有连接的情况下执行。
  • 谢谢!第二个例子很有帮助
猜你喜欢
  • 1970-01-01
  • 2018-02-19
  • 2015-11-17
  • 2021-02-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多