在SQL Server中按计数(*)除以计数

Vin*_*uet 6 sql sql-server alias count divide

这是我的查询:

SELECT 
    COUNT(*) AS total,
    COUNT(CASE WHEN t.id IS NULL THEN 1 END) AS nb_null,
    COUNT(CASE WHEN t.id IS NOT NULL THEN 1 END) AS nb_not_null
FROM
    table t
Run Code Online (Sandbox Code Playgroud)

是否可以通过别名划分字段?:

SELECT 
    COUNT(*) AS total,
    COUNT(CASE WHEN t.id IS NULL THEN 1 END) / total AS nb_null,
    COUNT(CASE WHEN t.id IS NOT NULL THEN 1 END) AS nb_not_null
FROM
    table t
Run Code Online (Sandbox Code Playgroud)

它在SQL Server中对我不起作用,我想知道是否有任何方法可以做到这一点?谢谢

Mar*_*ith 16

代替

COUNT(CASE WHEN t.id is null THEN 1 END)/Count(*) 
Run Code Online (Sandbox Code Playgroud)

您可以使用

AVG(CASE WHEN t.id is null THEN 1.0 ELSE 0 END)
Run Code Online (Sandbox Code Playgroud)

  • 多么有趣! (2认同)

小智 6

我需要用任意数量的特征(不仅仅是空与非空)来解决类似的问题,而且我还希望它们转换为百分比。这可能对您或有类似问题的其他人有所帮助:

WITH counts AS 
  (SELECT [feature], 
  COUNT(*) AS cnt
  FROM [your_table]
  GROUP BY [feature])
SELECT [feature], CAST(100 * num AS DOUBLE) / (SELECT SUM(num) FROM counts) 
  AS pct
FROM counts
ORDER BY pct DESC
Run Code Online (Sandbox Code Playgroud)