sql - 我如何根据以下条件编写此 sql

标签 sql

SELECT TestName,
    SUM(TestFee) AS TestFee ,
    COUNT(*) "No of Tests"
    FROM  ALLPATIENTINFO 
    WHERE ReqDate BETWEEN '2016-11-04' AND '2016-11-05'
    GROUP BY  TestName

这里只显示测试名称,总计,以及与日期对应的计数。但我想显示所有保存在数据表中的测试名称。如果测试名称超出此日期,则它仅显示测试名称,测试费用和计数将为零。

最佳答案

这里的一个选择是将 WHERE 子句的逻辑移动到 SELECT 子句中并使用条件聚合:

SELECT TestName,
       SUM(CASE WHEN ReqDate BETWEEN '2016-11-04' AND '2016-11-05'
                THEN TestFee ELSE 0 END) AS TestFee,
       SUM(CASE WHEN ReqDate BETWEEN '2016-11-04' AND '2016-11-05'
                THEN 1 ELSE 0 END) AS "No of Tests in Range",
       COUNT(*) AS "Total No of Test"
FROM ALLPATIENTINFO
GROUP BY TestName

这将保证出现在原始数据集中的每个测试名称也将出现在结果集中。

关于sql - 我如何根据以下条件编写此 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40439724/

相关文章:

sql - 使用in子句时如何获取SQL查询中的缺失值

mysql - MYSQL 中的动态游标

sql - 以最优化的方式从sql server表中获取记录数

mysql - 增量更新列中的所有名称

php - mysql价格比较,显示所有价格

.net - 选择哪个数据库以及如何压缩它

mysql - 如何在 MySQL 中正确使用 CASE..WHEN

mysql - 如何在 SQL 中获取每组的平均值并找出异常值

java - PreparedStatement.executeUpdate() 能否在 INSERT 时返回 0?

java - 预填充 HSQL 表