Mysql 如何最好地使用sql查询中的代码列表作为另一个查询的输入

Mysql 如何最好地使用sql查询中的代码列表作为另一个查询的输入,mysql,Mysql,我有两个SQL,我试图一起使用它们来生成一个报告,显示我要从另一个查询中提取的给定代码的两个字段的平均金额。所以这个查询返回代码列表 SELECT DISTINCT cc.code AS `CC Code` FROM ds LEFT OUTER JOIN dd ON ds.dd_id = dd.id LEFT OUTER JOIN ii ON ds.ii_id = ii.id LEFT OUTER JOIN dcc ON ds.id = dcc.dos_i

我有两个SQL,我试图一起使用它们来生成一个报告,显示我要从另一个查询中提取的给定代码的两个字段的平均金额。所以这个查询返回代码列表

SELECT DISTINCT
  cc.code AS `CC Code`
FROM ds
  LEFT OUTER JOIN dd
    ON ds.dd_id = dd.id
  LEFT OUTER JOIN ii
    ON ds.ii_id = ii.id
  LEFT OUTER JOIN dcc
    ON ds.id = dcc.dos_id
  LEFT OUTER JOIN cc
    ON dcc.cpt_id = cc.id
  LEFT OUTER JOIN bi
    ON ds.bi_id = bi.id
  LEFT OUTER JOIN cs
    ON bi.claim_status = cs.id
WHERE ii.company = "Alpha"
AND cs.status = "On HOLD"
AND dcc.amount_allowed > 0
这将返回大约25个唯一代码的列表。然后我手动运行这一个,插入其中的每一个,以获得使用该代码的两个字段的平均金额

SELECT
  cc.code AS `CC Code`,
  CAST(AVG(dcc.amount_allowed) AS decimal(10, 2)) `AVG Allowed`,
  CAST(AVG(dcc.paid_amount) AS decimal(10, 2)) `Paid Avg`,
  ii.company AS `I Company`
FROM ds
  LEFT OUTER JOIN dd
    ON ds.dd_id = dd.id
  LEFT OUTER JOIN ii
    ON ds.ii_id = ii.id
  LEFT OUTER JOIN dcc
    ON ds.id = dcc.dos_id
  LEFT OUTER JOIN cc
    ON dcc.cpt_id = cc.id
  LEFT OUTER JOIN bi
    ON ds.bi_id = bi.id
WHERE ii.company = "Alpha"
AND code = '35647'
AND dcc.amount_allowed > 0
返回的结果如下

抄送码 允许的平均值 付费平均值 保险公司 35647 9373.44 8652.30 阿尔法
让我们试着把注意力集中在你首先想要得到的东西上。忘记查询中未使用的所有其他表;在
中选择
其中
。例如:

SELECT
  cc.code AS `CC Code`,
  CAST(AVG(dcc.amount_allowed) AS decimal(10, 2)) `AVG Allowed`,
  CAST(AVG(dcc.paid_amount) AS decimal(10, 2)) `Paid Avg`,
  ii.company AS `I Company`
FROM ds
/* comment out this part
  LEFT OUTER JOIN dd
    ON ds.dd_id = dd.id */
  LEFT OUTER JOIN ii
    ON ds.ii_id = ii.id
  LEFT OUTER JOIN dcc
    ON ds.id = dcc.dos_id
  LEFT OUTER JOIN cc
    ON dcc.cpt_id = cc.id
/* comment out this part
  LEFT OUTER JOIN bi
    ON ds.bi_id = bi.id*/
WHERE ii.company = "Alpha"
AND code = '35647'
AND dcc.amount_allowed > 0
然后根据您的条件“我只想运行它,让它通过每个代码并返回每个代码的结果”,将查询修改为如下内容:

SELECT
  cc.code AS `CC Code`,
  CAST(AVG(dcc.amount_allowed) AS decimal(10, 2)) `AVG Allowed`,
  CAST(AVG(dcc.paid_amount) AS decimal(10, 2)) `Paid Avg`,
  ii.company AS `I Company`
FROM ds
  LEFT OUTER JOIN ii
    ON ds.ii_id = ii.id
  LEFT OUTER JOIN dcc
    ON ds.id = dcc.dos_id
  LEFT OUTER JOIN cc
    ON dcc.cpt_id = cc.id
WHERE dcc.amount_allowed > 0
GROUP BY cc.code, ii.company;

*commented out part omitted here for better view.
*removed > WHERE ii.company = "Alpha" AND code = '35647'.
由于您有一个聚合(
AVG()
),因此
SELECT
中的任何未聚合列都应位于
组中

对于
ii.公司
,有几个选项:

  • 如果不需要,请将其从
    选择
    分组方式
    中删除
  • 如果您并不真正关心
    ii.company
    返回的内容,您可以将其更改为
    ANY_值(ii.company)
    ,并将其保留在
    groupby
  • 如果要显示附加到单个
    cc.code
    ii.company
    中的所有内容,可以更改为
    GROUP\u CONCAT(DISTINCT ii.company)
    并将其从
    分组中删除

  • 看看这是否适合您。

    从中选择无列(bi)的左连接表没有什么意义。cs是一个内部联接,dcc也是。在
    SELECT
    中没有
    groupby
    和非聚合列的聚合与
    sql\u mode=only\u full\u GROUP\u BY
    不兼容。
    cc.code
    是否会有重复项?或是否将
    cc.code
    +
    ii.company
    的组合视为唯一的?第二个查询中的cc.code将不是唯一的,因为它从代码匹配的dcc中提取所有行,然后它将获取列出的两列的平均值如果我没有列出平均值,如果我刚刚选择了cc.code,dcc.amount\u allowed,dcc,paid\u amount,这将返回100行,其中包含所选代码的数据。谢谢,我留下的主要问题是,我的第一个查询是给我一个特定的代码列表,然后检查允许的平均值、支付的平均值。对于索赔状态为保留状态的代码,当我运行我发布的第一个查询时,它返回大约100个使用各种cc代码保留的索赔通知单,在这100个通知单中有26个不同的cc代码(一个给定的通知单可以使用多个cc代码)。我想做的是得到满足给定标准的不同代码列表,然后让这个新脚本显示这些代码的平均值。谢谢,这很有帮助实际上我已经解决了这一部分,只需要在WHERE子句中包含include语句的子查询,它将返回我需要使用的代码列表。再次感谢你的帮助。