2016-04-05 7 views
0

私の質問はおそらく非常に漠然としていて一見すると分かりにくいですし、私は30分間座って適切なタイトルを考えました。しかし、私のデータベースの知識は非常に限られているので、自分自身を適切に策定するのは難しいです。特定の行の一部である属性インスタンスのセットからのMIN値を持つSELECT属性?

それは次は私が達成しようとしているものです私は現在やっている学校の割り当ての一部です:

enter image description here

とER図Iは、システム製: enter image description here

私が達成しようとしているのは、最も少ない量(現在の在庫)を持つcomputer_system内のコンポーネントの数量を選択することで、私がプリントアウトしているデータセットに入っているので、店舗が売ることができる各computer_system、 computer_systemが構成する任意のコンポーネントの最低現在の量に基づいています。

これは私が現在達成しようとしているクエリですが、修正を試みるたびに数量が曖昧で、その他のエラーが複数発生しました。私は授業の友人たちと相談しましたが、運がありません。

SELECT 
computer_system.NAME, 
cpu.name as cpu, 
gpu.name as gpu, 
board.name as mainboard, 
pccase.name as pc_case, 
ram.name as ram, 
component.quantity as qty, 
(cpu.price *1.3+ board.price*1.3 + pccase.price*1.3 + ram.price*1.3 + gpu.price*1.3) as computer_system_price 

FROM computer_system, component 
join component cpu on cpu.id = computer_system.cpu 
join component gpu on gpu.id = computer_system.gpu 
join component board on board.id = computer_system.mainboard 
join component pccase on pccase.id = computer_system.pc_case 
join component ram on ram.id = computer_system.ram 
JOIN component qty ON qty.quantity = (SELECT MIN(component.quantity) FROM component WHERE component.id IN 
       (computer_system.pc_case, 
       computer_system.mainboard, 
       computer_system.cpu, 
       computer_system.gpu, 
     computer_system.ram)) 

答えて

0

次のコードは、私のためにそれを修正:

SELECT computer_system.name AS "System name", 
     cpu.name    AS "CPU", 
     gpu.name    AS "GPU", 
     pc_case.name   AS "Case", 
     mainboard.name  AS "Mainboard", 
     ram.name    AS "RAM", 
     FLOOR((cpu.price + mainboard.price + pc_case.price + ram.price + coalesce(gpu.price, 0))*1.3/100)*100+99 AS "System price", 
     SYSTEM.maxamount 

FROM computer_system 
     join (SELECT name, 
        id, 
        price 
      FROM component) AS cpu 
     ON cpu.id = computer_system.cpu 
    left join (SELECT name, 
        id, 
        price 
      FROM component) AS gpu 
     ON coalesce(gpu.id,0) = computer_system.gpu 
     join (SELECT name, 
        id, 
        price 
      FROM component) AS pc_case 
     ON pc_case.id = computer_system.pc_case 
     join (SELECT name, 
        id, 
        price 
      FROM component) AS mainboard 
     ON mainboard.id = computer_system.mainboard 
     join (SELECT name, 
        id, 
        price 
      FROM component) AS ram 
     ON ram.id = computer_system.ram 
     join (SELECT computer_system.name, 
        Min(component.quantity) AS maxamount 
      FROM computer_system, 
        component 
      WHERE computer_system.cpu = component.id 
        OR computer_system.gpu = component.id 
        OR computer_system.mainboard = component.id 
        OR computer_system.pc_case = component.id 
        OR computer_system.ram = component.id 
      GROUP BY computer_system.name) AS SYSTEM 
     ON SYSTEM.name = computer_system.name; 
関連する問題