我一直在研究一个包含大量摘要统计数据的项目。对我来说非常有用的一件事就是让变量集等于每行出现的查询结果。像
这样的东西declare @totalpop int
set @totalpop = select count(*) as [population]
from myTable
select sex, count(sex), @totalpop
from myTable
忍者编辑我试过的查询,但失败了。错误是关键字选择
附近的语法不正确答案 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];