对派生的SQL值执行算术运算

时间:2011-12-05 05:08:07

标签: mysql sql

我正在根据州的数据库做一些统计。我想输出状态的等级和它与其他状态相比的百分比(即状态X的值高于其他状态值的55%)。

我正在尝试这样的事情:

SELECT 
  count(*) AS TotalStates, 
  (SELECT COUNT(*) FROM states) AS NumberStates,
  (TotalStates/NumStates) AS percentage 
FROM states 
WHERE CRITERIA > 7.5

我收到SQL错误,找不到TotalStates(我的派生值)。如何通过一个查询返回所有这三个值?

2 个答案:

答案 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

然而,对于可读性或可维护性而言,这不是非常有效或不可取。是否存在设计原因导致您无法在两个查询中执行此操作,或者更好的是,在单独的查询中获取这两个数据项并计算使用代码中的百分比?