我一直在處理一個包含許多彙總統計信息的項目。有一件事對我很有幫助,那就是將變量設置爲等於每行顯示的查詢結果。像查詢中的用戶定義變量
declare @totalpop int
set @totalpop = select count(*) as [population]
from myTable
select sex, count(sex), @totalpop
from myTable
忍者編輯查詢我試過了,但它失敗了。錯誤是關鍵字附近的語法不正確選擇
我一直在處理一個包含許多彙總統計信息的項目。有一件事對我很有幫助,那就是將變量設置爲等於每行顯示的查詢結果。像查詢中的用戶定義變量
declare @totalpop int
set @totalpop = select count(*) as [population]
from myTable
select sex, count(sex), @totalpop
from myTable
忍者編輯查詢我試過了,但它失敗了。錯誤是關鍵字附近的語法不正確選擇
根據您的最後一段,這似乎是你想要什麼:
SELECT tsum.*, sum(cnt) over (partition by NULL) as TotalPop
FROM (SELECT gender, count(*) as cnt
FROM t
GROUP BY gender
) tsum
帶有「over」子句的表達式是一個窗口函數,它將所有窗口相加。
這工作就像我想要的。我沒有辦法解決這個問題嗎? – wootscootinboogie
SELECT gender, count(gender), @totalPop
FROM myTable
SELECT gender, count(gender) AS countGender, @totalPop AS totalPop
FROM myTable
GROUP BY gender
已更新我的查詢以反映我所嘗試的內容。 – wootscootinboogie
由於您使用@
變量,我假設你使用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];
我確實是SQL Server的新手。你能否指點我一些文獻爲什麼@不好分配變量? – wootscootinboogie
實際上,使用'@'是在T-SQL中創建和使用變量的唯一方法**。您的查詢的問題是語法。我更新了示例以將值存儲到局部變量中。 –
謝謝,善良的先生。我只是剛開始使用SQL – wootscootinboogie
向設置變量的查詢添加括號(從myTable中選擇count(*)as [population] ) – Arnoldiusss