sql - Count、Having 和 Case 语句

标签 sql group-by db2 case having

我希望根据 3 种不同的条件(DB2 数据库)生成项目计数。我需要计算所有 <= .10、>= .5 和 >= 1.00 (percentage_used) 的项目,但只能按 dim_building_id 和building_name 进行分组。当然,这个查询不会运行,因为它需要将 Percentage_used 添加到分组依据中。如何使用 Percentage_used 处理这 3 个条件?

SELECT
SUM(CAST(FTS.GROUP_A AS BIGINT)) AS GROUP_A,
        SUM(CAST(FTS.GROUP_B AS BIGINT)) AS GROUP_B,
        SUM(CAST(FTS.GROUP_C AS BIGINT)) AS GROUP_C,


                CASE WHEN FAT.PERCENTAGE_USED <= '0.10'
                THEN COUNT(*)
                END AS PROJECTS_L10,
                CASE WHEN FAT.PERCENTAGE_USED >= '0.50' 
                THEN COUNT(*)
                END AS PROJECTS_G50,
                CASE WHEN FAT.PERCENTAGE_USED >= '1.00' 
                THEN COUNT(*)
                END AS PROJECTS_G100,
        DAYS(DATE('2014-07-01')) - DAYS(CURRENT DATE)  AS DAYS_LEFT,
        (DAYS(DATE('2014-07-01')) - DAYS(CURRENT DATE))/7 AS WEEKS_LEFT, 
        DAYS(DATE('2013-12-31')) - DAYS(CURRENT DATE) AS DAYS_LEFT_YEAR      

FROM FACT_TABLE AS FAT
INNER JOIN GROUPS AS FTS ON FAT.DIM_PROJECT_ID = FTS.DIM_PROJECT_ID
GROUP BY FAT.DIM_BUILDING_ID, FAT.BUILDING_NAME;

最佳答案

我会做这样的事情:

select bn.building_name ,
       t.*
from ( select fat.building_id ,
              sum( case when fat.percentage_used <= 0.10                                then 1 else 0 end ) as group_a ,
              sum( case when fat.percentage_used >  0.10 and fat.percentage_used < 0.50 then 1 else 0 end ) as group_b ,
              sum( case when fat.percentage_used >= 0.50 and fat.percentage_used < 1.00 then 1 else 0 end ) as group_c ,
              sum( case when fat.percentage_used >= 1.00                                then 1 else 0 end ) as group_d ,
              sum( case when fat.percentage_used is null                                then 1 else 0 end ) as group_e
       from fact_table fat
       join groups     fts on tfs.dim_project_id = fat.dim_project_id
       group by fat.building_id
     ) t
join fact_table bn on bn.building_id = t.building_id

关于sql - Count、Having 和 Case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19010782/

相关文章:

mysql - 在可在不同数据库服务器上运行的查询中使用保留字

mysql - 更新mysql大表挂太时间

MySQL组,加入并选择Max

sql - 您如何对编码或加密数据进行 PostgreSQL 全文搜索?

mysql - 如何为每个组选择第一行(按日期时间排序)?

mysql - 为什么我不能在 MySQL 的 GROUP BY 查询中使用多列?

database - 插入时 DB2 覆盖自动生成的键

sql - 我如何添加表的以下三个字段的值并将其存储到 DB2 查询中的用户定义字段中

linux - PHP/Linux 到 AS/400-db2

sql - rails : get parent records having ZERO has_many associations