MySQL查询从表中获取信息,并获取相关表的计数。不包括所有记录

问题描述:

我想运行一个查询,抓取所有课程。每行(课程)还应该有一个user_countMySQL查询从表中获取信息,并获取相关表的计数。不包括所有记录

让我真正快速地展示我的表结构。我有两个相关的表格。这不显示这些表的所有字段,只是相关的信息。

COURSE 
id 
title 
desc 

USER_COURSE 
id 
user_id (fk) 
course_id (fk) 

我在这第一个尝试是创建以下查询:

SELECT course.title, course.desc, COUNT(*) as `user_count` 
FROM (`course`) 
JOIN `user_course` ON `user_course`.`course_id` = `course`.`id` 
GROUP BY `user_course`.`user_id` 

该查询的问题在于,其在user_course表中的记录那只能说明课程。指针?

要点:

  1. count(*)COUNT(user_course.user_id)为您计算号每个课程的用户数
  2. ON条件必须用圆括号包装
  3. 使用组course.id,因为您正在按课程分组结果b ASIS。

查看下面的查询。

SELECT course.title, 
      course.desc, 
      COUNT(`user_course`.`user_id`) AS `user_count` 
    FROM `course` 
      JOIN `user_course` 
      ON (`user_course`.`course_id` = `course`.`id`) 
    GROUP BY `course`.`id` 
+0

shiplu,这是正确的,除了我必须做“左外连接”而不是“连接“。 谢谢! – Roeland 2012-02-28 23:41:55

尝试左外连接。 而不是'连接',写'左外连接'。

而且包裹计数ISNULL(COUNT(*),0)来捕获任何记录为0值

+0

ISNULL似乎并没有工作:( – Roeland 2012-02-28 23:37:12

+0

SELECT course.title,course.desc,ISNULL(COUNT(*),0)作为'user_count' FROM('course') LEFT OUTER JOIN'user_course 'ON'user_course'.'course_id' ='course'.'id' GROUP BY'user_course'.'user_id' correct? – Roeland 2012-02-28 23:38:17