我一直在努力解决这个问题。我想我很接近了。(甲骨文,SQL)
我有一张如下所示的表格。
Company Code
Apple A
Google A
Microsoft B
Apple C
Google B
Microsoft B
Apple C
Google C
Microsoft B
每个公司都可以解析为多个代码。我想要做的是创建一个 SQL 语句,为每个公司提供最常出现的代码的公司。所以在我的例子中我会得到
Apple C
Google <nothing since there's no clear max>
Microsoft B
到目前为止,我整理的内容如下。此查询将代码出现最多的公司返回给我,但是如果我在公司的两个代码之间有联系,我会同时返回。对于我的示例中的 Google,我会得到 (Google, A), (Google, B), (Google, C)。我什么都不想要。
我相信我可以再次加入整个事情,并加入一些额外的 where 子句来过滤掉重复的公司,但是我想知道是否有更好的方法来做到这一点。让我丧命的是聚合函数以及 group by,因为有时我会收到 Oracle 单组组错误。任何建议表示赞赏。
SELECT m1, c.company sp1, b.code ul1 FROM
(SELECT MAX(c1) m1, company FROM
(SELECT COUNT(company||code) c1, company, code FROM table GROUP BY company, code ) a
GROUP BY company) c
left OUTER JOIN
(SELECT COUNT(company||code) c1, company, code FROM table GROUP BY company, code ) b
ON c.company=b.company and
m1=b.c1;
米