Mysql 如何最好地使用sql查询中的代码列表作为另一个查询的输入
我有两个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
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语句的子查询,它将返回我需要使用的代码列表。再次感谢你的帮助。