【问题标题】:SELECT attribute with MIN value from set of attribute instances that are part of specific row?从属于特定行的一组属性实例中选择具有 MIN 值的属性?
【发布时间】:2016-04-05 19:18:11
【问题描述】:

我知道我的问题乍一看可能非常模糊且难以理解,而且我已经坐了 30 分钟来考虑一个合适的标题。但是我的数据库知识非常有限,所以我还很难正确地制定自己的公式。

这是我目前正在做的学校作业的一部分,以下是我想要实现的目标:

以及我制作的系统 ER 图:

我想要完成的是,在计算机系统中选择数量最少的组件的数量(当前库存),以便我在要打印的数据集中能够准确说明每个组件的数量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))

【问题讨论】:

    标签: postgresql select join


    【解决方案1】:

    以下代码为我修复了它:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2012-11-30
      • 2014-07-24
      • 2012-06-08
      • 1970-01-01
      相关资源
      最近更新 更多