MySQL选择查看返回不同的结果

MySQL选择查看返回不同的结果,mysql,sql,sql-view,Mysql,Sql,Sql View,我创建了一个小的sql查询,它从一个表中获取数据,并以新的列名对其进行排序。sql如下所示: SELECT course_id AS course, NOW() as datum, (SELECT COUNT(*) FROM users_courses WHERE course_id = course) AS antal_registrerade, (SELECT COUNT(*) FROM users_courses WHERE status = 1 AND course_id = cours

我创建了一个小的sql查询,它从一个表中获取数据,并以新的列名对其进行排序。sql如下所示:

SELECT course_id AS course, NOW() as datum,
(SELECT COUNT(*) FROM users_courses WHERE course_id = course) AS antal_registrerade,
(SELECT COUNT(*) FROM users_courses WHERE status = 1 AND course_id = course) AS antal_aktiva,
(SELECT COUNT(*) FROM users_courses WHERE status = 3 AND course_id = course) AS antal_avklarade
FROM users_courses GROUP BY course_id
SELECT `database`.`users_courses`.`course_id` AS `course`,now() AS `datum`,
(SELECT COUNT(0) from `database`.`users_courses` where (`database`.`users_courses`.`course_id` = `database`.`users_courses`.`course_id`)) AS `antal_registrerade`,
(SELECT COUNT(0) from `database`.`users_courses` where ((`database`.`users_courses`.`status` = 1) and (`database`.`users_courses`.`course_id` = `database`.`users_courses`.`course_id`))) AS `antal_aktiva`,
(SELECT COUNT(0) from `database`.`users_courses` where ((`database`.`users_courses`.`status` = 3) and (`database`.`users_courses`.`course_id` = `database`.`users_courses`.`course_id`))) AS `antal_avklarade`
FROM `database`.`users_courses`
GROUP BY `database`.`users_courses`.`course_id`
上述查询返回以下内容:

| course | datum               | antal_registrerade | antal_aktiva  | antal_avklarade   |
-----------------------------------------------------------------------------------------
| 31     | 2016-01-12 16:24:58 | 142                | 19            | 83                |
| 38     | 2016-01-12 16:24:58 | 826                | 45            | 49                |
| 39     | 2016-01-12 16:24:58 | 2                  | 2             | NULL              |
| 43     | 2016-01-12 16:24:58 | 169                | 29            | 32                |
| 44     | 2016-01-12 16:24:58 | 11                 | 4             | 2                 |
| 45     | 2016-01-12 16:24:58 | 67                 | 8             | 7                 |
| 46     | 2016-01-12 16:24:58 | 2                  | 1             | 1                 |   
好的,好吗?就像我想要的那样。但当我将此查询保存为视图并运行时,结果会有所不同。我得到的每一行数据都相同,除了路线和基准列

| course | datum               | antal_registrerade | antal_aktiva  | antal_avklarade   |
-----------------------------------------------------------------------------------------
| 31     | 2016-01-12 16:24:58 | 1219               | 108           | 174               |
| 38     | 2016-01-12 16:24:58 | 1219               | 108           | 174               |
| 39     | 2016-01-12 16:24:58 | 1219               | 108           | 174               |
| 43     | 2016-01-12 16:24:58 | 1219               | 108           | 174               |
| 44     | 2016-01-12 16:24:58 | 1219               | 108           | 174               |
| 45     | 2016-01-12 16:24:58 | 1219               | 108           | 174               |
| 46     | 2016-01-12 16:24:58 | 1219               | 108           | 174               |   
有人知道这是为什么吗?在保存的视图中找到的sql如下所示:

SELECT course_id AS course, NOW() as datum,
(SELECT COUNT(*) FROM users_courses WHERE course_id = course) AS antal_registrerade,
(SELECT COUNT(*) FROM users_courses WHERE status = 1 AND course_id = course) AS antal_aktiva,
(SELECT COUNT(*) FROM users_courses WHERE status = 3 AND course_id = course) AS antal_avklarade
FROM users_courses GROUP BY course_id
SELECT `database`.`users_courses`.`course_id` AS `course`,now() AS `datum`,
(SELECT COUNT(0) from `database`.`users_courses` where (`database`.`users_courses`.`course_id` = `database`.`users_courses`.`course_id`)) AS `antal_registrerade`,
(SELECT COUNT(0) from `database`.`users_courses` where ((`database`.`users_courses`.`status` = 1) and (`database`.`users_courses`.`course_id` = `database`.`users_courses`.`course_id`))) AS `antal_aktiva`,
(SELECT COUNT(0) from `database`.`users_courses` where ((`database`.`users_courses`.`status` = 3) and (`database`.`users_courses`.`course_id` = `database`.`users_courses`.`course_id`))) AS `antal_avklarade`
FROM `database`.`users_courses`
GROUP BY `database`.`users_courses`.`course_id`

使用条件聚合表示这一点要简单得多:

SELECT course_id AS course, NOW() as datum,
       COUNT(*) as antal_registrerade,
       SUM(status = 1) as antal_aktiva,
       SUM(status = 3) AS antal_avklarade
FROM users_courses
GROUP BY course_id;
这将解决您的结果中的问题


由于某些原因,为视图保存的代码的correlation子句不正确。我的猜测是,表中没有
课程
课程id
的两列,因此您的第一个查询并不完全是视图中的内容。在任何情况下,都可以使用更简单的查询来解决此问题。

使用条件聚合来表达此问题要简单得多:

SELECT course_id AS course, NOW() as datum,
       COUNT(*) as antal_registrerade,
       SUM(status = 1) as antal_aktiva,
       SUM(status = 3) AS antal_avklarade
FROM users_courses
GROUP BY course_id;
这将解决您的结果中的问题


由于某些原因,为视图保存的代码的correlation子句不正确。我的猜测是,表中没有
课程
课程id
的两列,因此您的第一个查询并不完全是视图中的内容。无论如何,请使用更简单的查询解决此问题。

您的视图是什么样子的?-我是说密码view@DanielCasserly我已经更新了帖子,你的观点是什么样的我是说密码view@DanielCasserly我已经更新了帖子哦,哇,真漂亮。这样做更有意义,是一个更优雅的解决方案。谢谢问题解决了!哇,真漂亮。这样做更有意义,是一个更优雅的解决方案。谢谢问题解决了!