PostgreSql データベースで 3 つのテーブルを次のように使用しています。
Customer(Id, Name, City),
Product(Id, Name, Price),
Orders(Customer_Id, Product_Id, Date)
そして、クエリを実行して、「製品と一緒に少なくとも2つの異なる製品を注文した顧客」を取得したいと考えています。私が書くクエリは次のとおりです。
select c.*, p.*
from customer c
join orders o on o.customer_id = c.id
join product p on p.id = o.product_id
group by (c.id)
having count(distinct o.product_id)>=2
エラーがスローされます:
"列 "p.id" は GROUP BY 句に指定するか、集計関数 LINE 1 で使用する必要があります: select c.*, p.*
".
ただし、select ステートメントから p.* を削除すると (製品は必要なく、顧客のみが必要であると仮定して)、問題なく動作します。また、どうすれば商品を手に入れることができますか?
更新: 2 つ以上の製品を注文した顧客は、注文した製品の数だけ出力に表示される必要があります。5列のテーブルを出力したい:
Cust ID | Cust Name | Cust City | Prod ID | Prod Name | Prod Price
使用する必要があることを考えると、SQLでそれは可能group by
ですか? 異なるテーブルの複数の列で使用する必要がありますか?