Having in SQL 服务器的条件过滤器
Conditional filter with Having in SQL Server
我正在使用 SQL Server 2016。我正在尝试弄清楚如何使用 having 子句进行条件过滤。
我想给我一个所有 ID、日期和用户名的列表,如果日期在 2018 年之前,则向我显示具有 2-12 个 ID 的用户,如果日期在 2018 年之后,则向我显示具有 2 个 ID 的用户-24 个 ID。我只能考虑合并代码,但这会增加处理时间,有没有其他方法可以更快地完成此操作?
原码:
select [id], [date], [user name]
from [table]
where [date] < '2018-01-01'
group by [id], [date], [user name]
having count([id]) between 2 and 12) b
联合理念:
select [id], [date], [user name]
from [table]
where [date] < '2018-01-01'
group by [id], [date], [user name]
having count([id]) between 2 and 12) b
UNION
select [id], [date], [user name]
from [table]
where [date] >= '2018-01-01'
group by [id], [date], [user name]
having count([id]) between 2 and 24) b
您可以在 HAVING 语句中使用 OR:
select [id], [date], [user name]
from [table]
group by [id], [date], [user name]
having (
(count([id]) between 2 and 12 AND [date] < '2018-01-01')
OR
(count([id]) between 2 and 24 AND [date] >= '2018-01-01')
);
仅当您在 HAVING 子句中引用的列是聚合列或包含在 GROUP BY 子句中时才有效
我正在使用 SQL Server 2016。我正在尝试弄清楚如何使用 having 子句进行条件过滤。
我想给我一个所有 ID、日期和用户名的列表,如果日期在 2018 年之前,则向我显示具有 2-12 个 ID 的用户,如果日期在 2018 年之后,则向我显示具有 2 个 ID 的用户-24 个 ID。我只能考虑合并代码,但这会增加处理时间,有没有其他方法可以更快地完成此操作?
原码:
select [id], [date], [user name]
from [table]
where [date] < '2018-01-01'
group by [id], [date], [user name]
having count([id]) between 2 and 12) b
联合理念:
select [id], [date], [user name]
from [table]
where [date] < '2018-01-01'
group by [id], [date], [user name]
having count([id]) between 2 and 12) b
UNION
select [id], [date], [user name]
from [table]
where [date] >= '2018-01-01'
group by [id], [date], [user name]
having count([id]) between 2 and 24) b
您可以在 HAVING 语句中使用 OR:
select [id], [date], [user name]
from [table]
group by [id], [date], [user name]
having (
(count([id]) between 2 and 12 AND [date] < '2018-01-01')
OR
(count([id]) between 2 and 24 AND [date] >= '2018-01-01')
);
仅当您在 HAVING 子句中引用的列是聚合列或包含在 GROUP BY 子句中时才有效