[英]Oracle query Group by 3 values
I have a query that returns 3 columns with USERNAME, LAST_LOGIN and DAYS_FROM LOGIN.我有一个查询返回 USERNAME、LAST_LOGIN 和 DAYS_FROM LOGIN 的 3 列。
USERNAME LAST_LOGIN DAYS_FROM_LOGIN
ASUNI_O 2020-06-04T14:37:58 8
BUNHU_T 2020-06-10T13:55:02 2
CHET_RA 2020-05-19T13:34:22 24
CHHANA_H
CRAWFO_R 2020-06-08T09:46:53 4
DAVEL_M 2020-06-11T14:17:36 1
Dagama_E 2020-06-11T12:14:10 1
Dewet_Se
Dillon_A 2020-06-11T11:47:55 1
What I would like to do is group these by into 3 groups, less than 14 days, more than 14 days and never logged in我想做的是将这些分成 3 组,少于 14 天,多于 14 天并且从未登录
Might look something like this可能看起来像这样
Count User_Activity
6 less_than_14
1 More_than_14
2 Never_logged_in
I was thinking of 3 nested queries each one providing the details of each group.我在考虑 3 个嵌套查询,每个查询提供每个组的详细信息。
You can use the SIGN
function as follows:您可以使用
SIGN
function,如下所示:
SELECT CASE
WHEN SIGN(DAYS_FROM_LOGIN - 14) = - 1 THEN
'less_than_14'
WHEN SIGN(DAYS_FROM_LOGIN - 14) = 1 THEN
'more_than_14'
ELSE 'Never_logged_in'
END AS USER_ACTIVITY,
COUNT(1) AS USER_ACTIVITY
FROM YOUR_TABLE
GROUP BY SIGN(DAYS_FROM_LOGIN - 14);
You can do with case
expression as following.您可以使用
case
表达式,如下所示。 here is the db<>fiddle这是db<>fiddle
select
count(*) as count,
subq.user_activity
from
(
select
case
when days_from_login < 14 then 'less_than_14'
when days_from_login > 14 then 'more_than_14'
else 'Never_logged_in'
end as user_activity
from yourTable
) subq
group by
subq.user_activity
output: output:
*---------------------*
| COUNT USER_ACTIVITY |
*---------------------*
1 more_than_14
2 Never_logged_in
6 less_than_14
*---------------------*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.