2

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 の問題について教えてください。

4

1 に答える 1

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;

ただし、Computer テーブル (デスクトップ テーブルやラップトップ テーブルはもちろん) の列を使用していないため、JOIN も必要ありません。

SELECT orderid, AVG(quantity) AS AvgDesktopsSold
  FROM order
 WHERE type_pc = 'desktop'
 GROUP BY orderid;

これで、「デスクトップ用の注文ごとのデスクトップの平均数」の答えが得られますが、その平均は数量でもあります。orderidしたがって、 select-list や GROUP BY 句は必要ありません。

SELECT AVG(quantity) AS AvgDesktopsSold
  FROM order
 WHERE type_pc = 'desktop';
于 2012-11-22T04:13:26.693 に答える