假设我有4张桌子
Order (OrderID, ComputerID, Quantity, Type_PC)
Computer (ComputerID, Model)
Desktop (ComputerID, specs, Cost)
Laptop (ComputerID, specs, Cost)
我正在尝试获取每个订单的平均桌面数量。
SELECT order.orderid, avg(order.quantity) AS AvgDesktopsSold
FROM computer, order
WHERE order.type_pc ="desktop" AND computer.computerid = order.computerid;
我的错误是Column "Desktop" not found
你能帮我解决这个SQL问题吗?
答案 0 :(得分:2)
SQL标准将双引号视为包含“分隔标识符”,这意味着双引号表示内部名称是列名或表名,或其附近。你需要在字符串周围使用单引号。
许多基于Unix的DBMS对双引号中的字符串相当灵活。显然,您正在使用的那个没有,或者没有被配置为。
您还应该避免使用FROM computer, order
表示法。您需要知道它存在以防您阅读真正的旧代码,但您应该始终在SQL中使用显式JOIN表示法。所以,如果你需要加入,你应该写:
SELECT order.orderid, AVG(order.quantity) AS AvgDesktopsSold
FROM computer
JOIN order ON computer.computerid = order.computerid
WHERE order.type_pc = 'desktop';
您还应该使用GROUP BY子句。任何非聚合列都应该在GROUP BY子句中。
SELECT order.orderid, AVG(order.quantity) AS AvgDesktopsSold
FROM computer
JOIN order ON computer.computerid = order.computerid
WHERE order.type_pc = 'desktop'
GROUP BY order.orderid;
但是,由于您没有使用计算机表中的任何列(更不用说桌面或笔记本电脑表),您甚至不需要JOIN:
SELECT orderid, AVG(quantity) AS AvgDesktopsSold
FROM order
WHERE type_pc = 'desktop'
GROUP BY orderid;
现在,这将为您提供“桌面每个订单的平均桌面数量”的答案,但该平均值也是数量。所以,你真的不需要select-list中的orderid
,或者毕竟不需要GROUP BY子句:
SELECT AVG(quantity) AS AvgDesktopsSold
FROM order
WHERE type_pc = 'desktop';