我正在构建一个带有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 1
FROM    dbo.AD_CurrentView
GROUP BY UID
HAVING  SUM(ContractDollars) >= 500000

COUNTIF()行显然失败了,因为没有名为COUNTIF的本机SQL函数,但这里的 idea 是确定MyColumn值为"1"的所有行的百分比.

关于如何在MS SQL 2005环境中正确实现这一点,您有什么 idea 吗?

推荐答案

你可以用SUM(不是COUNT!)再加上CASE条语句,比如:

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

Sql相关问答推荐

如何在T—SQL中找到值更改之前的日期?

SQL—如何在搜索的元素之后和之前获取元素?

SQL(PostgreSQL)从条件创建点表

计算分段的总权重

使用WHERE子句进行筛选时,SQL SELECT查询返回总计数

没有循环的SQL更新多个XML node 值

BigQuery-当子查询不返回任何结果时,所有结果为零

缺少日期标识

通过对象分离实现原子性

向表中添加新列取决于表的日期列(unpivot)

根据时间值提取记录

SQL Server 查询 WHERE LIKE

如何根据创建日期查找两个表中最接近的记录?

返回给定日期后的第 4 个工作日(不包括公众假期)

PostgreSQL-用第一个非空填充以前的值

如何通过CROSS APPLY获取多级嵌套JSON属性的值?

SQL 按 id 运行总计并受条件限制(在窗口上)

如何显示最常引用条目的详细信息

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

snowfalke 会在 Select 运行时锁定表吗?