MySQL COUNT 个意外结果

标签 mysql sql database

我的数据库结构是这样的:

https://docs.google.com/open?id=0B9ExyO6ktYcOenZ1WlBwdlY2R3c

部分表格说明:

  1. answer_chk_results - 检查答案表。因此,如果此表中不存在某些答案,则表示未选中
  2. lesson_questions - 类(class) <-> 问题关联(按 id)表

当我这样查询数据库时:

SELECT
    q.id,
    q.content,
    q.type
FROM
    `questions_and_exercises` q,
    `lesson_questions` lq
WHERE
    q.id = lq.qid
AND lq.lid = 1

我正在获取所有问题列表。但我想要的是对每个问题的答案和检查答案的计数。当我使用这个查询时:

SELECT
    q.id,
    q.content,
    q.type,
    COUNT(DISTINCT a.ID) answer_count,
    COUNT(DISTINCT acr.id) checked_count
FROM
    `questions_and_exercises` q,
    `lesson_questions` lq
LEFT JOIN answers a ON a.qid = lq.qid,
LEFT JOIN `answer_chk_results` acr ON acr.aid = a.id
WHERE
    q.id = lq.qid
AND lq.lid = 1

结果只有 1 个问题的答案数错误。 (我的数据库中大约有 9-10 个问题)我错过了什么?

最佳答案

group by 会有所帮助,例如:

select  q.id
,       q.content
,       q.type
,       count(distinct a.id) as answer_count
,       count(acr.checked) as checked_count
from    questions_and_exercises q
join    lesson_questions lq
on      q.id = lq.id
left join
        answers a 
on      a.qid = lq.qid
left join
        answer_chk_results acr 
on      acr.aid = a.id
group by
        q.id
,       q.content
,       q.type

请注意,count(acr.checked) 返回 answer_chk_results 表中一行的答案数。并且 count(distinct acr.checked) 返回选中列的不同值的数量。如果 checked 是 bool 值,则它始终为一或零。

关于MySQL COUNT 个意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12227216/

相关文章:

mysql - INSERT 在单个列中,该列的其余部分将具有默认值

mysql - SQL 连接数据库列表

一台服务器上跨多个 InnoDB 数据库的 MySQL 事务

sql - 如何在 MYSQL 中优化此查询?需要做什么

php - fatal error :在第 67 行调用/var/www/bugreporting.php 中未定义的方法 options::getCategoriesbug()

php - php函数中sql查询中的假值仅在引号中有效

sql - BigQuery - 是否可以在 à FROM 中使用 IF 语句?

database - 从对象定义生成数据库表

mysql - Tomcat、Spring、Hibernate 应用程序 - 用户报告 session 混淆

c# - 向Mysql插入数据越来越慢