查询中的用户定义变量

时间:2012-05-11 12:54:38

标签: sql tsql

我一直在研究一个包含大量摘要统计数据的项目。对我来说非常有用的一件事就是让变量集等于每行出现的查询结果。像

这样的东西
declare @totalpop int
set @totalpop = select count(*) as [population]
from myTable

select sex, count(sex), @totalpop
from myTable

忍者编辑我试过的查询,但失败了。错误是关键字选择

附近的语法不正确

4 个答案:

答案 0 :(得分:2)

SELECT gender, count(gender) AS countGender, @totalPop AS totalPop 
FROM myTable  
GROUP BY gender

答案 1 :(得分:2)

根据您的上一段,这似乎是您想要的:

SELECT tsum.*, sum(cnt) over (partition by NULL) as TotalPop
FROM (SELECT gender, count(*) as cnt
      FROM t
      GROUP BY gender
     ) tsum

带有“over”子句的表达式是一个窗口函数,它将所有窗口相加。

答案 2 :(得分:1)

SELECT gender, count(gender), @totalPop
FROM myTable 

答案 3 :(得分:1)

由于您对变量使用@,我假设您正在使用Sql Server。以下脚本返回一行,包含3列(每个计数一列)。我知道这不是你要求的,但我想这是一个简单的方法来返回相同的信息:

DECLARE @COUNT_TOTAL INT;
DECLARE @COUNT_MALE INT;
DECLARE @COUNT_FEMALE INT;

SELECT @COUNT_TOTAL = COUNT(*)
  @COUNT_MALE = SUM(CASE WHEN gender='MALE' THEN 1 ELSE 0 END),
  @COUNT_FEMALE = SUM(CASE WHEN gender='FEMALE' THEN 1 ELSE 0 END),
FROM myTable;

SELECT @COUNT_TOTAL AS [COUNT_TOTAL]
    , @COUNT_MALE AS [COUNT_MALE]
    , @COUNT_FEMALE AS [COUNT_FEMALE];