亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

相當于COUNTIF聚合函數的SQL Server

相當于COUNTIF聚合函數的SQL Server

肥皂起泡泡 2019-11-12 10:45:01
我正在建立一個帶有GROUP BY子句的查詢,該子句需要能夠僅基于特定條件來對記錄進行計數(例如,僅對某個列值等于1的記錄進行計數)。SELECT  UID,         COUNT(UID) AS TotalRecords,         SUM(ContractDollars) AS ContractDollars,        (COUNTIF(MyColumn, 1) / COUNT(UID) * 100) -- Get the average of all records that are 1FROM    dbo.AD_CurrentViewGROUP BY UIDHAVING  SUM(ContractDollars) >= 500000該COUNTIF()行顯然由于沒有調用本機SQL函數COUNTIF而失敗,但是這里的想法是確定MyColumn的所有值為'1'的行的百分比。關于如何在MS SQL 2005環境中正確實現這一點的任何想法?
查看完整描述

3 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

您可以將SUM(而不是COUNT?。┡cCASE語句結合使用,如下所示:


SELECT SUM(CASE WHEN myColumn=1 THEN 1 ELSE 0 END)

FROM AD_CurrentView

注意:在我自己的測試NULL中,這不是問題,盡管這可能取決于環境。您可以處理空值,例如:


SELECT SUM(CASE WHEN ISNULL(myColumn,0)=1 THEN 1 ELSE 0 END)

FROM AD_CurrentView


查看完整回答
反對 回復 2019-11-12
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

我通常會按照Josh的建議去做,但是集思廣益并測試了我覺得很喜歡分享的略微曲折的選擇。


您可以利用COUNT(ColumnName)不計算NULL的事實,并使用如下所示的內容:


SELECT COUNT(NULLIF(0, myColumn))

FROM AD_CurrentView

NULLIF-如果兩個傳入的值相同,則返回NULL。


優點:將您的意圖表達為COUNT行,而不是SUM()表示法。缺點:不清楚其工作方式(“魔術”通常很糟糕)。


查看完整回答
反對 回復 2019-11-12
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

SELECT COUNT(CASE WHEN myColumn=1 THEN AD_CurrentView.PrimaryKeyColumn ELSE NULL END)

FROM AD_CurrentView

對于我來說效果很好(在SQL Server 2012中),而無需將“計數”更改為“總和”,并且相同的邏輯可移植到其他“條件聚合”中。例如,根據條件求和:


SELECT SUM(CASE WHEN myColumn=1 THEN AD_CurrentView.NumberColumn ELSE 0 END)

FROM AD_CurrentView


查看完整回答
反對 回復 2019-11-12
  • 3 回答
  • 0 關注
  • 1339 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號