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):按特定列分组的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 按多维数据集分组 - 按不同列求和

Oracle:如何在获取结果之前按某些列对记录进行分组

在 Oracle SQL 中生成动态列值

Oracle sql查询按日期对连续记录进行分组

Oracle SQL 查询计数组按时间戳子串

Oracle查询语句怎么样按天分组