私は、各ブランチの顧客の上位5%の姓と顧客番号をリストするために、指定されたデータベース(かなり巨大なのでコードシェアを使用)を使用することになっています。顧客の上位5%を見つけるために、NTILE機能(100/5 = 20、NTILE 20)を使用することに決めました。列は2つの別々のテーブルから引き出されているため、内部結合を使用しました。私の人生のために、私はうんざりしてどこに間違っているのか理解できません。私は "表現が見つからない"というエラーを受け続けますが、正確に何が欠けているのか分かりません。 https://codeshare.io/5XKKBj ERD:https://drive.google.com/file/d/0Bzum6VJXi9lUX1d2ZkhudTE3QXc/view?usp=sharingここNTILE関数とOracleのインナー結合を使用
は、これまでのところ、私のSQLクエリです。ここデータベース
データベースがあります。
SELECT
Ntile(20) over
(partition by Employee.Branch_no
order by sum(ORDERS.SUBTOTAL) desc
) As Top_5,
CUSTOMER.CUSTOMER_NO,
CUSTOMER.LNAME
FROM
CUSTOMER
INNER JOIN ORDERS
ON
CUSTOMER.CUSTOMER_NO = ORDERS.CUSTOMER_NO
GROUP BY
ORDERS.SUBTOTAL,
CUSTOMER.CUSTOMER_NO,
CUSTOMER.LNAME;
1)あなたは 'Employee'テーブルを欠いています。 (2) 'GROUP BY'は全ての非集約式を' SELECT'節に含めなければなりません(つまり、 'ORDERS.SUBTOTAL'を集約しているので' GROUP BY'に含めることはできません)。 (3)サブクエリを使用して、ソースデータを照合してから、「NTILE」を適用することを検討してください。 –
Employee.Branch_noを使用しないと、そこに実際にテーブルがあることになりますか?私が考えることができるのは、別のインナー・ジョイントを使用することだけですが、無駄に思えます。あなたはサブクエリを説明できますか? –
結合されていないテーブルは参照できません。それがジョインです。 –