sql - 选择语句中无法识别的列
问题描述
我在此代码的 Select 语句中遇到错误。
SELECT Track.Name, Track.UnitPrice,
Count(*) AS Purchase_count,
Purchase_count * Track.UnitPrice AS Total_per_track
FROM Track
JOIN InvoiceLine ON Track.TrackId = InvoiceLine.TrackId
GROUP BY Track.Name
ORDER BY Total_per_track desc
LIMIT 10;
返回的错误是
Result: no such column: Purchase_count
At line 1:
SELECT Track.Name, Track.UnitPrice,
Count(*) AS Purchase_count,
Purchase_count * Track.UnitPrice AS Total_per_track
FROM Track
JOIN InvoiceLine
ON Track.TrackId = InvoiceLine.TrackId
GROUP BY Track.Name
ORDER BY Total_per_track desc
LIMIT 10;
解决方案
您不能SELECT
在同一子句中引用该子句中定义的别名(WHERE
例如,也不能在子句中引用)。您需要重复原始表达式,或使用派生表(子查询或 cte)。
这里的表达式很简单,所以重复似乎更相关:
SELECT
t.Name,
t.UnitPrice,
COUNT(*) AS Purchase_count,
COUNT(*) * t.UnitPrice AS Total_per_track
FROM Track t
INNER JOIN InvoiceLine il ON t.TrackId = il.TrackId
GROUP BY t.TrackId, t.Name, t.UnitPrice
ORDER BY Total_per_track desc
LIMIT 10;
笔记:
我在子句中添加了
TrackId
and ;是否可以避免错误地将两条相同的轨道组合在一起;出现在子句中并且不是聚合函数的一部分,因此将它也包含在子句中是一个好习惯(尽管它似乎在功能上依赖于)UnitPrice
GROUP BY
TrackId
Name
UnitPrice
SELECT
GROUP BY
TrackId
表别名使查询的读写更短
推荐阅读
- python - PyCharm 无法调试 Qt5 (PySide2) 代码 - 错误“Shiboken.ObjectType”对象不可迭代
- javascript - Html 按钮无法触发与 Document.clear 同名的事件函数
- c - 使用归并排序的多线程
- groovy - soapUI Groovy 脚本中的意外标记
- javascript - 当超链接在数据源中时,单击按钮打开超链接
- firebase - 我需要使用颤振和 firebase 添加电子邮件/密码身份验证
- imagej - 如何从 imagej - fiji 中的交叉点数组重新创建边界?
- java - Spring Boot @Scheduled 使用不同的配置文件
- java - FTC Robotics 代码启动缓慢,因为“imu”有问题”
- react-native - 使用 Expo 从 React Native 应用程序打开 Whatsapp