Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
任何一位Mysql专家知道如何在1个查询中处理自定义组计算场景吗?_Sql_Mysql - Fatal编程技术网

任何一位Mysql专家知道如何在1个查询中处理自定义组计算场景吗?

任何一位Mysql专家知道如何在1个查询中处理自定义组计算场景吗?,sql,mysql,Sql,Mysql,我希望我的解释能有道理。我能够创建查询,但是我的查询仅适用于与容器相关的项目,并且仅当没有多个项目相关时才有效。我真的希望任何人都能帮上忙 考虑以下对象: 容器 人 项目 我有一个表,其中存储了所有对象的实例。该表使用自引用父子结构,因此从技术上讲,可以将容器“放在人的内部”(仅提及,这种情况不会发生) 对象\u实例 目标 父ID 类型ID typespecification(与containerid、personid或itemid相同=>三者中的一个已填充) 集装箱 拟人 项目ID

我希望我的解释能有道理。我能够创建查询,但是我的查询仅适用于与容器相关的项目,并且仅当没有多个项目相关时才有效。我真的希望任何人都能帮上忙

考虑以下对象:

  • 容器
  • 项目
我有一个表,其中存储了所有对象的实例。该表使用自引用父子结构,因此从技术上讲,可以将
容器
“放在
的内部”(仅提及,这种情况不会发生)

  • 对象\u实例
    • 目标
    • 父ID
    • 类型ID
    • typespecification(与containerid、personid或itemid相同=>三者中的一个已填充)
    • 集装箱
    • 拟人
    • 项目ID
我有两个表格可用于将人员/物品链接到容器:

  • 集装箱(人)

    • 集装箱
    • 拟人
    • 数量
    • 必需(布尔值)
  • 集装箱项目

    • 集装箱
    • 项目ID
    • 数量
    • 必需(布尔值)
(还有一个个人/*项目*表)

现在,对于一个容器的实例,我想计算一个介于0和1之间的数字,该数字基于相关的容器人员和容器项目规范,如下所示:
  • 如果没有与容器相关的容器\人员/容器\项目=>result=1
  • 如果有相关记录,应按以下方式考虑:
    • 如果容器未包含(具有子记录)所有必需的相关人员/项目=>结果0
    • 否则:
    • 结果=基于以下条件的平均值:
    • (#子记录与容器中的金额关系)
    • 如果有超过1个人或物品与集装箱相关,则(#记录vs金额)值的“重量”应为该集装箱的相关集装箱金额值之间的比率
以下是我目前的“解决方案”: 此查询仅适用于容器的一个相关项。它没有以任何方式考虑人。。。如果有多个项与容器相关,则查询将返回多条记录

因此,我的实际问题是:如何根据_Person/_itemrelated amount/required specification对以下查询的结果进行分组/求和(计算到0-1位小数)?
在进行复杂连接和分组时,我通常不得不求助于这种类型的查询:

  • 创建分组(或唯一)列表
  • 在新查询中,获取分组列表,然后加入一个未分组列表,该列表提供所需的其他详细信息
SELECT
    Container.name,
    Item.name,
    (ifnull(Sum(Object_Instance.amount),0) / Container_Item.amount) as value
FROM
    Container
    Inner Join Object_Instances as Containers 
        ON Containers.typeid = 'container' 
        AND Container.containerid = Containers.typespecification
    Left Outer Join Container_Item ON Container_Item.containerid = Container.containerid
    Left Outer Join Item ON Item.itemid = Container_Item.itemid
    Left Outer Join Object_Instance as ContainerItems 
        ON Item.itemid = ContainerItems.typespecification 
        AND ContainerItems.typeid = 'item'
        AND ContainerItems.parentid = Containers.objectid
WHERE Containers.objectid = 1
GROUP BY 
    Container.name,
    Container_Item.amount,
    Item.name,
    Container.containerid