我提前道歉,因为我对 SQL 有点陌生,所以我的代码可能看起来毫无意义,但我会尽我所能理解它,希望你更有经验的人能帮助我。我不确定它是否会有所帮助,但我使用的是 Oracle 数据库。
我有两张桌子:
Elements - 这包含一个elementID和一个elementName字段
Exchanges - 这包含一个exchangeID和一个elementID字段
我创建了以下查询,以便仅检索超过 50% 的交换中出现的元素:
SELECT e.elementName
FROM Elements e
WHERE e.elemID in
(SELECT elemID FROM Exchanges
GROUP BY elemID
HAVING (count(*) / (SELECT count(*) FROM
(SELECT exchangeID, count(*) FROM Exchanges GROUP BY exchangeID))) > 0.5);
这部分似乎工作正常,但我还需要检索交换中每个项目的出现百分比。因此,例如,如果元素 A 出现在 76% 的交换中,元素 B 出现在 59% 的交换中,我想返回一行包含 A 和 76% 的行和另一行包含 B 和 59% 的行。在我看来,这意味着以某种方式获得 HAVING 子句左侧表达式的结果:
(count(*) / (SELECT count(*) FROM
(SELECT exchangeID, count(*) FROM Exchanges GROUP BY exchangeID)))
这个表达式给了我我正在寻找的百分比,但是我无法找到一种方法来使用这个表达式,以便我可以用 SELECT 检索它,以便我可以将它与其对应的 elementName 配对就像我刚才解释的那样。
有没有办法将此值传播到我的 SELECT 以便我可以检索我正在寻找的值?