我在这里列出了一个名为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
但它只计算了我的查询结果中的数字,而不是我需要的整个表格(并在上面说明)。感谢。
答案 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;