返回表的子集以及包含整个表的count的列的SQL查询

时间:2014-10-21 16:25:07

标签: sql oracle

我在这里列出了一个名为PEOPLE(性别,年龄,体重)的表格:

Sex Age Weight
M   10  81   
F   21  146
M   32  179
F   40  129
F   58  133

我希望返回以下数据(性别,年龄,体重,计数(*)为来自PEOPLE的SexCount,其中年龄<35):

Sex Age Weight  SexCount
M   10  81      2
F   21  146     3
M   32  179     2

如果我想要返回表格中的所有人(count without group),我找到了有效的答案。

但是如果我想让SexCount包含整个表中的总计数,我还没有找到答案......而不仅仅是我返回子集的总计数。换句话说,我希望我的返回数据只包括年龄小于35岁的人,但我希望SexCount包括表中所有人的计数,而不管年龄。

任何人都知道一个查询将从上面的表示例中返回我想要的数据吗?如果它有所作为,我正在使用Oracle。

我尝试在查询中使用此SQL短语:

COUNT(*) OVER(PARTITION BY Sex) as SexCount

但它只计算了我的查询结果中的数字,而不是我需要的整个表格(并在上面说明)。感谢。

1 个答案:

答案 0 :(得分:3)

您正在寻找使用与该组其他人不同的标准构建的输出上的单个列。无论您的SQL系统如何,都需要调用第二个记录集。

值得庆幸的是,由于您并未真正寻找聚合查询,因此可以使用FROM列表中的单个子查询来完成此操作。

SELECT P.Sex, P.Age, P.Weight, T.SexCount
FROM PEOPLE as P
INNER JOIN (SELECT Sex, COUNT(*) As SexCount FROM PEOPLE GROUP BY Sex) AS T
  ON P.Sex = T.Sex
WHERE P.Age < 35;