所以我已经找到了一个包含Username和SummedHourCount列的表。我的目标是选择用户名(SummedHourCount / SUM(SummedHourCount)) > 3/4
。SUM(SummedHourCount)
,表示该列中的所有小时数。
例如,如果我有以下数据:
Username, SummedHourCount
randy.jackson, 13
jaren.neilson, 1
jerome.nettles, 2
billy.bobjr, 1
我希望查询只选择randy.jackson, 13
。
我遇到困难的部分是实施HAVING子句。我并不是非常熟悉,但每次尝试都会因语法错误而失败,或者根本没有按预期工作并返回所有结果。这就是我目前所拥有的:
SELECT ValueOne,
SummedHourCount
FROM
(
SELECT ValueOne,
SUM(HourCount) AS SummedHourCount
FROM #loggedhours
GROUP BY ValueOne
) ta
GROUP BY ValueOne, SummedHourCount
HAVING (SummedHourCount / SUM(SummedHourCount)) > 3/4
它只会返回所有结果,但至少不会抛出任何语法错误。如果某人对HAVING条款更了解并且对如何构建查询有一些见解,那将非常感激。
答案 0 :(得分:0)
您可以尝试以下内容:
select username, SummedHourCount from #loggedhours cross join
(select sum(SummedHourCount) totalHours from #loggedhours) as t
where (SummedHourCount*1.0/totalHours) > 3.0/4
答案 1 :(得分:0)
如果你的目标是检索数据前四分位数中的行,我可以建议:
SELECT TOP 25 PERCENT ValueOne, SummedHourCount
FROM (
SELECT ValueOne,
SUM(HourCount) AS SummedHourCount
FROM #loggedhours
GROUP BY ValueOne
) ta
Order by SummedHourCount DESC
答案 2 :(得分:0)
在我看来,您正在尝试找到小时数超过总数的3/4(75%)的用户。那是对的吗?如果是,那么以下内容可能对您有用(它使用聚合和窗口函数,但不使用HAVING
):
SELECT ValueOne, SummedHourCount FROM (
SELECT ValueOne, SummedHourCount
, SUM(SummedHourCount) OVER () AS TotalHourCount
FROM (
SELECT ValueOne, SUM(HourCount) AS SummedHourCount
FROM #loggedhours
GROUP BY ValueOne
)
) WHERE SummedHourCount / TotalHourCount > 3/4
希望这有帮助。