【问题标题】:Query to find attendance count per month per student ID查询每个学生证每月的出勤人数
【发布时间】:2021-05-09 17:00:18
【问题描述】:

我需要为以下场景创建一个 Oracle 查询:-

我需要查询该学生每月每个地点参加课程的次数。我们需要使用表中的访问日期列来查找出勤人数。

我们需要找出每个学生在一月、二月、三月……每个地点参加课程的次数。学生还可以根据以下示例数据从不同位置滑动。

最后的查询应该告诉我们: ID 、location[所有字母都大写],后缀没有 US 以及每月的访问次数。

我尝试了以下查询,但没有成功:-

select ID,SUBSTRING(t.location,1,(INSTR(t.location,',')-1) as COUNTY from tablename t group by Access Dates;

有人可以建议如何纠正或建议 oracle 查询以实现以下输出吗?我对 Oracle 不太熟悉。请建议。

预期输出

ID:  COUNTY  Attendancecount  Month
101  NEWYORK       21            JAN
102  NEWJERSEY     24            JAN
103  LOSANGELES    20            JAN
104  LOSANGELES    27            JAN
101  NEWYORK       25            FEB
102  NEWJERSEY     18            FEB
103  LOSANGELES    21            FEB
104  LOSANGELES    21            FEB

示例数据如下所示:

样本数据

ID   location        Access dates
101  newyork,USA      01-Jan-2021
102  newjersey,USA    02-Jan-2021
103  newyork,USA      02-Jan-2021
104  Losangeles,USA   01 Jan 2021
101  newyork,USA    04 Jan 2021
102  newJersey,USA    04 Jan 2021
103  newyork,USA      05-Jan-2021
104  Losangeles,USA   05 Jan 2021
101  newyork,USA    05 Jan 2021
102  newJersey,USA    05 Jan 2021

问候 哈里

【问题讨论】:

  • Edit 问题并详细解释“它不起作用”的含义。
  • 提示:要获取记录数,请使用聚合函数COUNT。网上有很多例子可以让你自己找出答案。
  • 我尝试的查询不起作用,我不知道如何根据分隔符进行隔离以及如何根据访问日期查找出勤人数。逻辑并不引人注目
  • @KoenLostrie :我使用了 count,但它仍然不能与有子句给出条件。你能发送一些类似的例子我会尝试。我是 oracle 新手,所以我不知道

标签: sql oracle oracle11g oracle10g


【解决方案1】:

您可以使用regexp_repalceupper,如下所示:

select ID,
       upper(regexp_replace(t.location,'(,USA)$') as COUNTY,
       count(*) as attendance_count,
       to_char(t.ACCESSDATES,'MON') as month_ 
  from tablename t 
 group by ID,
       upper(regexp_replace(t.location,'(,USA)$'),
       to_char(t.ACCESSDATES,'MON');

【讨论】:

  • 如果我需要提取年份,我可以使用:to_char(t.ACCESSDATES,'YEAR') Year。请指教。对于月份,我们使用 MON 什么是 YEAR 的参数
  • 你可以使用YYYY
【解决方案2】:

首先确保您的数据井然有序。您在 Access 日期中有不同类型的格式,请更正它并确保此列的数据类型为 DATE。第二, 从列标题中删除空格。现在请尝试以下:

SELECT
t.ID
,UPPER(SUBSTR(t.location,1,INSTR(t.location,',')-1)) COUNTY
,count(t.ACCESSDATES) ATTENDANCECOUNT
,to_char(t.ACCESSDATES,'MON') MONTH
from tablename t
group by 
t.ID
,UPPER(SUBSTR(t.location,1,INSTR(t.location,',')-1))
,to_char(t.ACCESSDATES,'MON')
;

【讨论】:

  • 如果我需要提取年份,我可以使用:to_char(t.ACCESSDATES,'YEAR') Year。请咨询
  • 您好,您应该使用:to_char(t.ACCESSDATES,'YYYY')。您可以在此处找到有关格式的更多信息:docs.oracle.com/cd/B28359_01/server.111/b28286/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多