德鲁是正确的,你有一个派生表T,但我会尝试添加一些细节,可能对你有用,因为你在一门课程。
- 你有一个派生表T
- 外部查询(第一选择)
- 内查询(在括号中的第二选择)
- 内查询使用表别名的u为用户。
- 内部查询的最后一列是dvdId,它是userDvd表和用户标识中的dvdIds的计数
- 由于外部查询限制使用内部查询的最终记录集,因此只有那2列可用选择并看到他们不包括名字,姓氏或性别你收到错误。
如果您希望保持查询相同,但要使用这些列,您可以将派生表加入用户表并获取所需的列。像这样的:
SELECT userId, firstname, lastname, gender
FROM
(SELECT COUNT(dvdId) dvdId, u.userId
FROM userDVD
JOIN users u ON userDVD.userId = u.userId
GROUP BY userId) as T
INNER JOIN users u2
ON t.user_id = u2.user_id
WHERE gender = 'F';
这种技术的加入回到原来的表是伟大的,当你有优化的聚合是在大表或查找重复的或类似的东西。然而,在你的情况,你真的只需要一个单一的查询聚合所有的结果你想要的列设置像这样:
SELECT
u.userId, u.firstname, u.lastname, u.gender, COUNT(d.dvdId) as DVDCount
FROM
userDVD d
JOIN users u
ON d.userId = u.userId
WHERE u.gender = 'F'
GROUP BY
u.userId, u.firstname, u.lastname, u.gender
;
您的查询没有任何意义。样本数据和期望的结果将有助于传达您想要做的事情。 –