mysql - 选择同一表的另一个查询中的行数

标签 mysql sql

我正在尝试从另一个查询中的选择查询中选择行数。这是我所拥有的:

SELECT `userId`, `groupId` AS gId, (
    SELECT COUNT(*) FROM (
        SELECT * FROM `groupcommits` WHERE `groupId`=`groupcommits`.gId
    ) temp_table
) AS `numberOfCommitedUsers` FROM `groupcommits` 
LEFT JOIN `groups` ON `groups`.`id`=`groupcommits`.`groupId`
LEFT JOIN `institutions` ON `institutions`.`id`=`groups`.`institutionId`
WHERE `groupcommits`.`userId`=userId;

这现在不起作用,它会导致 1064 错误。我希望对于每一行,numberOfCommitedUsers 包含 groupcommits 中具有该行的 groupId 的行数。我怎样才能做到这一点?

谢谢,

--

最佳答案

您可以使用相关子查询来完成此操作:

SELECT g2.`userId`, g2.`groupId` AS gId, (
       SELECT COUNT(*) 
       FROM `groupcommits` AS g1
       WHERE g1.`groupId`= g2.`groupId`) AS `numberOfCommitedUsers` 
FROM `groupcommits` AS g2
LEFT JOIN `groups` ON `groups`.`id`= g2.`groupId`
LEFT JOIN `institutions` ON `institutions`.`id`=`groups`.`institutionId`
WHERE g2.`userId`= userId;

您在子查询中使用的额外嵌套级别是多余的。

关于mysql - 选择同一表的另一个查询中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34385269/

相关文章:

mysql - 如何将 SQL 查询中的列信息存储到字符串列表中?

java - JDBC ResultSet 获取具有表别名的列

php - 将现有的 php 搜索重构为 OOP

mysql - 想要替换SQL中数据中的列中的Id值

sql - 如何使用带有文本 "|"的 sql 脚本创建文本文件

sql - MYSQL 合并列

sql - PostgreSQL 如何将 null 视为值

mysql - 如何根据列SQL删除重复行

mysql - 在bash中将mysql错误写入日志文件

php - 使用 PHP 从 HTML 获取特定数据