首页 > 解决方案 > 一个查询中的多个 COUNT(DISTINCT CAST(field AS DATE)

问题描述

我需要根据 2 个标准(作为一个整体)找到countof distinct dates,但我还需要显示distinct date这 2 个标准中每一个的计数。因为日期字段还包含时间,所以我使用的是:
COUNT(DISTINCT CAST(se.SeriesDate AS DATE)),它工作得很好。但是我正在努力为我的 WHERE 子句中的两个标准中的每一个都包括相同的计数。

我努力了:

SELECT ID,
COUNT(DISTINCT CAST(se.SeriesDate AS DATE)) VISITS,
COUNT(DISTINCT CAST(se.SeriesDate AS DATE) CASE WHEN se.Manufacture LIKE 'CIRRUS%' THEN se.SeriesDate END) Cirrus,
COUNT(DISTINCT CAST(se.SeriesDate AS DATE) CASE WHEN se.Manufacture LIKE 'Glaucoma%' THEN se.SeriesDate END) Glaucoma
From patient
WHERE (se.Manufacture LIKE 'CIRRUS%' OR se.Manufacture LIKE 'Glaucoma%'
GROUP BY ID

我希望它返回这个(这些是不同的访问日期):

Visits: 9
Cirrus: 6
Glaucoma: 3

这显然是行不通的,但是在尝试研究CASTCASE一起研究之后,我什么也没找到。如果这不是日期字段,我了解如何执行此操作。有没有人这样做过?蒂亚!

标签: mysql

解决方案


条件聚合语法:

SELECT ID,
COUNT(DISTINCT CAST(se.SeriesDate AS DATE)) VISITS,
COUNT(DISTINCT CASE WHEN se.Manufacture LIKE 'CIRRUS%' 
                    THEN CAST(se.SeriesDate AS DATE) END) Cirrus,
COUNT(DISTINCT CASE WHEN se.Manufacture LIKE 'Glaucoma%' 
                    THEN CAST(se.SeriesDate AS DATE) END) Glaucoma
From patient
WHERE (se.Manufacture LIKE 'CIRRUS%' OR se.Manufacture LIKE 'Glaucoma%')
GROUP BY ID;

推荐阅读