MySQL:单个查询来计算 2 个表中的多个列

标签 mysql count

<分区>

我意识到已经有几个与这个问题类似的问题 ( here are three ),但我已经阅读了其中的许多问题,但无法根据我的具体情况给出答案 (也就是说,我是个脑残 n00b)。

我的终极目标

创建“最受欢迎”组的列表,其中最受欢迎的位于顶部。人气是由成员(member)人数决定的。每个组都有成员数和引用数;我想运行一个查询来获取这两个计数。

表结构

群组成员

+--------------------+------------------+------+-----+---------+----------------+
| Field              | Type             | Null | Key | Default | Extra          |
+--------------------+------------------+------+-----+---------+----------------+
| member_id          | int(10)          | NO   | PRI | None    |                |
| group_id           | int(10)          | NO   | PRI | None    |                |
+--------------------+------------------+------+-----+---------+----------------+

group_quotes

+--------------------+------------------+------+-----+---------+----------------+
| Field              | Type             | Null | Key | Default | Extra          |
+--------------------+------------------+------+-----+---------+----------------+
| quote_id           | int(10)          | NO   | PRI | None    |                |
| group_id           | int(10)          | NO   | PRI | None    |                |
+--------------------+------------------+------+-----+---------+----------------+

组数据

+--------------------+------------------+------+-----+---------+----------------+
| Field              | Type             | Null | Key | Default | Extra          |
+--------------------+------------------+------+-----+---------+----------------+
| entry_id           | int(10) unsigned | NO   | PRI | None    | auto_increment |
| title              | varchar(100)     | NO   |     | None    |                |
| url_title          | varchar(75)      | No   |     | None    |                |
+--------------------+------------------+------+-----+---------+----------------+

当前(损坏的)查询

我已经尝试了以下(以及它的关闭变体),但结果是每个表中条目数的倍数:

SELECT group_quotes.group_id, COUNT(group_quotes.group_id) AS numquotes, COUNT(group_members.group_id) AS nummembers
FROM group_quotes, group_members
GROUP BY group_quotes.group_id
ORDER BY numquotes
DESC LIMIT 5

...within the query loop, output the group's title, etc...

例如:当我上次运行此查询时,group_members 表中有 7 个条目,group_quotes 表中有 3 个 group_id #10 实例;我得到了第 10 组的成员数和引用数 21(正确的数字应该是 2 和 3)。

有人介意看一下并告诉我哪里出错了吗?

最佳答案

已更新

像这样的东西应该可以工作:

SELECT    `group_data`.`id`,
          `group_data`.`title`,
          `group_data`.`url_title`,
          COUNT(DISTINCT `group_members`.`id`) AS  AS `group_members_count`, 
          COUNT(DISTINCT `group_quotes`.`id`) AS `group_quotes_count`
FROM      `group_data`
LEFT JOIN `group_members`
ON        `group_members`.`group_id`
LEFT JOIN `group_quotes`
ON        `group_quotes`.`group_id`
GROUP BY  `group_data`.`id`
ORDER BY  COUNT(`group_quotes`.`id`) DESC;

关于MySQL:单个查询来计算 2 个表中的多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6351537/

相关文章:

SQL 服务器 : How can I use the COUNT clause without GROUPing?

r - 计算每行唯一值的数量

c# - 计算数组中的项目,除了等于 -1 的值

php - 如何使用 php 禁用树结构中的子级

mysql选择与最后输入的行具有相同值的行

php - 将 mysql 查询的结果保存到未产生预期结果的 session 变量数组中

php - SQL 未正确返回表中存在的行

mysql - SQL使COUNT()返回查询中的总行数

php - 如何交叉选择一些数据

php - mysql where条件问题