SQL (Oracle):按特定列分组
Posted
技术标签:
【中文标题】SQL (Oracle):按特定列分组【英文标题】:SQL (Oracle): group by bounded to certain columns 【发布时间】:2017-10-05 09:00:29 【问题描述】:问题如下:我需要显示每个客户支付的数量(使用 COUNT()
函数)(用 codcli 列的代码标识)但被某些人过滤部门(tipope 列)。正如您在图片中看到的那样,数字已显示,但在各个部门之间进行了拆分,而我希望每个客户只显示一次。
如何在不拆分付款的情况下进行过滤?
【问题讨论】:
添加一些示例表数据和预期结果 - 全部为格式化文本(不是图像)。同时向我们展示您当前的查询尝试。 抱歉,由于公司防火墙,看不到图像:/ - 您可以使用sqlfiddle.com 来演示该问题吗? 抱歉,这是 SQL 查询:select codcli, tipope, count(codcli) as somma_bonifici from mov group by codcli, tipope 在 ('VE5', 'VE9', 'PR5', 'PR9') 由 codcli 订购 @AndreaZed 以表格文本格式发布所需的输出 【参考方案1】:也许我没有正确理解你的问题,但为什么不简单:
SELECT CODCLI, COUNT(*) AS SOMMA_BONIFICI
FROM MOV
WHERE TIPOPE IN ( 'VE5', ' VE9', 'PR5', 'PR9')
GROUP BY CODCLI
ORDER BY CODCLI;
【讨论】:
更简单!感谢您的帮助【参考方案2】:不要在外部查询中包含分区 (Tipope
),而在子查询中包含您的 COUNT
。
SELECT CODCLI, SUM(SELECT COUNT(sub.CODCLI)
FROM mov sub
WHERE sub.TIPOPE = TIPOPE
GROUP BY sub.CODCLI) AS SOMMA_BONIFICI
FROM mov
WHERE TIPOPE IN ('VE5', ' VE9', 'PR5', 'PR9')
GROUP BY CODCLI
ORDER BY CODCLI
哪个会输出:
CODCLI SOMMA_BONIFICI
AA200078 16
AA200300 10
AA200412 3
AA200309 9
【讨论】:
已经完成,但我需要按部门过滤,否则我会使用 count() 函数获得不同的数字 感谢您的帮助! @etsa 我也没有,我猜他们不喜欢我的工作 我会给你我的投票。实际上您的查询有点多余,但我根本不喜欢反对票,因为不考虑人们所做的努力。 @etsa yeh 我的回答是在 OP 的额外澄清之前以上是关于SQL (Oracle):按特定列分组的主要内容,如果未能解决你的问题,请参考以下文章