我正在根据州的数据库做一些统计。我想输出状态的等级和它与其他状态相比的百分比(即状态X的值高于其他状态值的55%)。
我正在尝试这样的事情:
SELECT
count(*) AS TotalStates,
(SELECT COUNT(*) FROM states) AS NumberStates,
(TotalStates/NumStates) AS percentage
FROM states
WHERE CRITERIA > 7.5
我收到SQL错误,找不到TotalStates
(我的派生值)。如何通过一个查询返回所有这三个值?
答案 0 :(得分:9)
您可以将主要计算放在子选择中,然后引用外部查询中的别名列,既可以提取已计算的值,也可以从中获取另一个值:
SELECT
TotalStates,
NumberStates,
TotalStates / NumberStates AS percentage
FROM (
SELECT
COUNT(*) AS TotalStates,
(SELECT COUNT(*) FROM states) AS NumberStates
FROM states
WHERE CRITERIA > 7.5
) s
答案 1 :(得分:2)
您获得的错误来自于您尝试在创建它的同一个select子句中使用派生值这一事实。您可能需要在这些方面做一些事情:
SELECT count(*) as TotalStates,
(SELECT count(*) from states) as NumberStates,
(count(*)/(SELECT count(*) from states)) as percentage
FROM states
WHERE criteria = x
然而,对于可读性或可维护性而言,这不是非常有效或不可取。是否存在设计原因导致您无法在两个查询中执行此操作,或者更好的是,在单独的查询中获取这两个数据项并计算使用代码中的百分比?