mysql - 如何最好地使用 sql 查询中的代码列表作为另一个查询的输入
问题描述
我有几个 SQL 我试图一起使用来生成一个报告,显示我想从另一个查询中提取的给定代码的 2 个字段的 AVG 数量。所以这个查询返回代码列表
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 个唯一代码的列表。然后我运行这个手动插入其中的每一个以获得使用该代码的 2 个字段的平均金额。
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
或WHERE
. 例如:
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
都应该在GROUP BY
.
如果是ii.company
,有几个选项:
- 如果您不想要它,请将其从
SELECT
和中删除GROUP BY
。 - 如果您真的不在乎
ii.company
返回什么,您可以将其更改为ANY_VALUE(ii.company)
并保留在GROUP BY
. - 如果您想显示
ii.company
附加到单个的所有内容cc.code
,您可以更改为GROUP_CONCAT(DISTINCT ii.company)
并从中删除它GROUP BY
。
看看这是否适合你。
推荐阅读
- matlab - 根据波长为 Matlab 图着色
- node.js - 在特定房间使用 Socket.io 显示旧数据
- python - 谷歌日历api acl
- function - 如何访问在前一个函数中创建的第二个函数的标签数组?Win Forms App.NET
- android - 在 android studio 中构建 XML 按钮
- javascript - Javascript 代码在 WordPress 主题文件中不起作用
- javascript - Ag-grid:从 getRowNodeId 回调中检测到重复的节点 id 107,这可能会导致您的网格出现问题
- javascript - 条件渲染显示两个组件
- postgresql - 通过模糊匹配POSTGRESQL从数据库中获取地址
- angular - Visual Studio Code 智能感知未显示字符串的所有属性