Sql CTE查询失败,出现关于未知列名的错误
我正在学习CTE,我在做一个练习。请看下表: 捐赠 计划 支持者 目的是显示支持者的名字和姓氏,以及尚未成立的项目数量和金额<他们创建的最小金额 我的SQL:Sql CTE查询失败,出现关于未知列名的错误,sql,Sql,我正在学习CTE,我在做一个练习。请看下表: 捐赠 计划 支持者 目的是显示支持者的名字和姓氏,以及尚未成立的项目数量和金额
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中提到列名是错误的,这在您的表中不存在,并且最小金额也需要包含在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
你的dbms是什么?你的groupby应该是名字和姓氏吗?应该是通用的,但我使用Postres@这是我的主意。在练习的描述中没有这样的要求。为什么我的问题被否决了?我得到了错误:column projects.firstname必须出现在GROUP BY子句中或用于聚合函数中。@menteith yap编辑的答案需要在GROUP BY子句中找到
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1 | Marlene | Wagner |
| 2 | Lonnie | Goodwin |
| 3 | Sophie | Peters |
| 4 | Edwin | Paul |
| 5 | Hugh | Thornton |
| 6 | Dianne | Harris |
+----+------------+-----------+
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;
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