gpt4 book ai didi

MySQL SELECT 到 VIEW 返回不同的结果

转载 作者:行者123 更新时间:2023-11-29 07:25:19 26 4
gpt4 key购买 nike

我已经整理了一个小型 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

上面的查询返回以下内容:

| 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 |

一切都好,好吗?就像我想要的那样。但是当我将此查询保存为 View 并运行时,结果是不同的。除了类(class)和数据列之外,我对每一行都获得相同的数据。

| 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 |

有人知道这是为什么吗?在保存的 View 中找到的 sql 如下所示:

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;

这应该可以解决您的结果问题。

由于某种原因,保存的 View 代码的相关子句不正确。我的猜测是,表中没有 coursecourse_id 两列,因此您的第一个查询并不完全是进入 View 的内容。无论如何,请使用更简单的查询来解决此问题。

关于MySQL SELECT 到 VIEW 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34747828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com