sql - CTE 查询失败,出现关于未知列名的错误
问题描述
我正在学习 CTE,我开始做一项练习。请查看以下表格:
捐款
+----+------------+--------------+---------+------------+------------+
| id | project_id | supporter_id | amount | amount_eur | donated |
+----+------------+--------------+---------+------------+------------+
| 1 | 4 | 4 | 928.40 | 807.70 | 2016-09-07 |
| 2 | 8 | 18 | 384.38 | 334.41 | 2016-12-16 |
| 3 | 6 | 12 | 367.21 | 319.47 | 2016-01-21 |
| 4 | 2 | 19 | 108.62 | 94.50 | 2016-12-29 |
| 5 | 10 | 20 | 842.58 | 733.05 | 2016-11-30 |
| 6 | 4 | 15 | 653.76 | 568.77 | 2016-08-05 |
+----+------------+--------------+---------+------------+------------+
项目
+----+------------+-----------+----------------+
| id | category | author_id | minimal_amount |
+----+------------+-----------+----------------+
| 1 | music | 1 | 1677 |
| 2 | music | 5 | 21573 |
| 3 | travelling | 2 | 4952 |
| 4 | travelling | 5 | 3135 |
| 5 | travelling | 2 | 8555 |
+----+------------+-----------+----------------+
支持者
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1 | Marlene | Wagner |
| 2 | Lonnie | Goodwin |
| 3 | Sophie | Peters |
| 4 | Edwin | Paul |
| 5 | Hugh | Thornton |
| 6 | Dianne | Harris |
+----+------------+-----------+
目的是显示支持者的名字和姓氏以及他们创建的尚未创建项目的数量(金额总和< minimum_amount )。
我的 SQL:
WITH projects AS
(
SELECT
first_name AS firstName,
last_name AS lastName,
project_id,
SUM(amount) AS amountSum,
minimal_amount
FROM
donation d
INNER JOIN
project p ON p.id = d.project_id
INNER JOIN
supporter s ON s.id = p.author_id
GROUP BY
FIRST, LAST, project_id
)
SELECT
firstName,
lastName,
COUNT(project_id)
FROM
projects
WHERE
amountSum < minimal_amount;
我收到一个错误:
“第一”列不存在
解决方案
您在 GROUP BY FIRST、LAST 中提及列名是错误的,这在您的表中不存在,并且 minimum_amount 也需要包含在 group by 子句中,因为您没有对该列使用任何聚合
WITH projects AS
(
SELECT first_name AS firstName,
last_name AS lastName,
project_id,
sum(amount) AS amountSum,
minimal_amount
FROM donation d
INNER JOIN project p ON p.id = d.project_id
INNER JOIN supporter s ON s.id = p.author_id
GROUP BY first_name ,
last_name ,
project_id,minimal_amount
)
SELECT firstName,
lastName,
count(project_id)
FROM projects
WHERE amountSum < minimal_amount
group by firstName,
lastName
推荐阅读
- sql-server - 使用分隔符将 VARCHAR 类型的数据库表列值拆分为多个值?
- assembly - 英特尔 64/IA32 四字压缩水平加法?
- ckan - 在 CKAN 中获取包的 HarvestSource
- python - 如何均匀拆分具有不均匀类的数据集
- javascript - 预期 '===' 而是看到 '==' eqeqeq
- java - 使用 java.io.file 的詹金斯管道总是引用主
- javascript - 如何在没有 JavaScript 的情况下运行我的搜索框?
- java - 尝试查找元素时如何使用 Stream on List 引发异常?
- javascript - 在 Javascript 中单击按钮时添加/删除一行
- r - 被R卡住了!(循环和线性模型)