
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
작성자 : 김성훈
작성일 : 2023.11.08
내용 : Matching 관련 SQL 입니다.
-->
<mapper namespace="kr.co.takensoft.keris.statistics.dao.StatisticsDAO">
<!-- resultMap sample
<resultMap id="CrawlingSiteResult" type="CrawlingSite">
<result property="crawlingSiteSeq" column="crawling_site_seq"/>
<result property="site" column="site"/>
<collection property="CrawlingChannels" column="{crawlingSiteSeq = crawling_site_seq}" javaType="java.util.ArrayList" ofType="CrawlingChannel" select="getCrawlingChannelList" />
</resultMap> -->
<!-- **************************************** 로그인 통계 (시작) **************************************** -->
<!--
작성자 : 김성훈
작성일 : 2023.11.23
내용 : 누적 Matching 성공 수
-->
<select id="accumulateMatching" resultType="int">
SELECT
COUNT(*)
FROM
matching_complete
WHERE
use_yn = 'Y'
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.23
내용 : 누적 Pick 성공 수
-->
<select id="accumulatePick" resultType="int">
SELECT
COUNT(*)
FROM
networking_complete
WHERE
use_yn = 'Y'
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.23
내용 : 누적 회원 수
-->
<select id="accumulateMember" resultType="int">
SELECT
COUNT(*)
FROM
users
WHERE
use_yn = 'Y'
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 로그인 로그 등록
-->
<insert id="loginLogInsert" parameterType="HashMap">
INSERT INTO login_log (
user_id,
login_dt,
user_auth,
login_ip,
device_ty
) VALUES (
#{user_id}
, CURRENT_TIMESTAMP
, #{user_auth}
, #{login_ip}
, #{device_ty}
)
</insert>
<!--
작성자 : 김성훈
작성일 : 2023.11.24
내용 : 오늘 날짜 로그인 로그 존재 여부
-->
<select id="selectLoginLog" parameterType="String" resultType="boolean">
SELECT EXISTS (
SELECT
stats_date
FROM
login_stats
WHERE
stats_date = #{stats_date}:: DATE
)
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 로그인 카운트 등록
-->
<insert id="loginCntInsert" parameterType="String">
INSERT INTO login_stats (
stats_date
, cmmn_login_cnt
, cpn_login_cnt
) VALUES (
#{stats_date} :: DATE
, 0
, 0
)
</insert>
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 로그인 카운트 증가
-->
<update id="loginCntAdd" parameterType="HashMap">
UPDATE
login_stats
SET
<if test="user_auth == 'company'">
cpn_login_cnt = cpn_login_cnt + 1
</if>
<if test="user_auth == 'common'">
cmmn_login_cnt = cmmn_login_cnt + 1
</if>
WHERE
stats_date = #{stats_date} :: DATE
</update>
<!-- **************************************** 로그인 통계 (종료) **************************************** -->
<!-- **************************************** 방문자 통계 (시작) **************************************** -->
<!--
작성자 : 김성훈
작성일 : 2023.11.23
내용 : 오늘 방문자 수 통계
-->
<select id="todayVisit" resultType="int">
SELECT
non_vst_cnt + cmmn_vst_cnt + cpn_vst_cnt AS vst_cnt
FROM
vst_stats
WHERE
stats_date = current_date
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 방문 로그 등록
-->
<insert id="visitLogInsert" parameterType="HashMap">
INSERT INTO vst_log (
vst_dt
, user_id
, user_auth
) VALUES (
CURRENT_TIMESTAMP
, #{user_id}
, #{user_auth}
)
</insert>
<!--
작성자 : 김성훈
작성일 : 2023.11.24
내용 : 오늘 날짜 방문 로그 존재 여부
-->
<select id="selectVisitLog" parameterType="String" resultType="boolean">
SELECT EXISTS (
SELECT
stats_date
FROM
vst_stats
WHERE
stats_date = #{stats_date}:: DATE
)
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 방문 카운트 등록
-->
<insert id="visitCntInsert" parameterType="String">
INSERT INTO vst_stats (
stats_date
, non_vst_cnt
, cmmn_vst_cnt
, cpn_vst_cnt
) VALUES (
#{stats_date} :: DATE
, 0
, 0
, 0
)
</insert>
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 방문 카운트 증가
-->
<update id="visitCntAdd" parameterType="HashMap">
UPDATE
vst_stats
SET
<if test="user_auth == 'non'">
non_vst_cnt = non_vst_cnt + 1
</if>
<if test="user_auth == 'company'">
cpn_vst_cnt = cpn_vst_cnt + 1
</if>
<if test="user_auth == 'common'">
cmmn_vst_cnt = cmmn_vst_cnt + 1
</if>
WHERE
stats_date = #{stats_date} :: DATE
</update>
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 로그인 유저 방문 카운트 빼기
-->
<update id="visitCntSubtraction" parameterType="String">
UPDATE
vst_stats
SET
non_vst_cnt = non_vst_cnt -1
WHERE
stats_date = #{stats_date} :: DATE
</update>
<!--
작성자 : 김성훈
작성일 : 2023.11.24
내용 : 날짜 별 방문자 수
-->
<select id="visitSelectList" parameterType="HashMap" resultType="HashMap">
SELECT
<if test="type == 'day'">
stats_date
, non_vst_cnt + cmmn_vst_cnt + cpn_vst_cnt AS total_cnt
, non_vst_cnt
, cmmn_vst_cnt
, cpn_vst_cnt
</if>
<if test="type == 'month'">
substring(stats_date::character varying , 0, 8) as stats_date
, coalesce(sum(non_vst_cnt + cmmn_vst_cnt + cpn_vst_cnt), 0) AS total_cnt
, coalesce(sum(non_vst_cnt),0) as non_vst_cnt
, coalesce(sum(cmmn_vst_cnt), 0) as cmmn_vst_cnt
, coalesce(sum(cpn_vst_cnt),0) as cpn_vst_cnt
</if>
<if test="type == 'year'">
substring(stats_date::character varying , 0, 5) as stats_date
, coalesce(sum(non_vst_cnt + cmmn_vst_cnt + cpn_vst_cnt), 0) AS total_cnt
, coalesce(sum(non_vst_cnt),0) as non_vst_cnt
, coalesce(sum(cmmn_vst_cnt), 0) as cmmn_vst_cnt
, coalesce(sum(cpn_vst_cnt),0) as cpn_vst_cnt
</if>
FROM
vst_stats
<where>
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
<choose>
<when test="type == 'day'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' DAY
</when>
<when test="type == 'month'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' MONTH
</when>
</choose>
</if>
</where>
<if test="type == 'month'">
group by substring(stats_date::character varying , 0, 8)
</if>
<if test="type == 'year'">
group by substring(stats_date::character varying , 0, 5)
</if>
ORDER BY stats_date
<if test='excel != "Y"'>
OFFSET #{pagingRowIndex} LIMIT #{perPage}
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.30
내용 : 어제 날짜 기준 총 합계
-->
<select id="visitSelectTotal" parameterType="HashMap" resultType="HashMap">
<if test="type == 'month' or type == 'year'">
select
COALESCE(SUM(non_vst_cnt + cmmn_vst_cnt + cpn_vst_cnt), 0) AS total_cnt
, COALESCE(SUM(non_vst_cnt), 0) AS non_vst_cnt
, COALESCE(SUM(cmmn_vst_cnt), 0) AS cmmn_vst_cnt
, COALESCE(SUM(cpn_vst_cnt), 0) AS cpn_vst_cnt
from (
</if>
SELECT
COALESCE(SUM(non_vst_cnt + cmmn_vst_cnt + cpn_vst_cnt), 0) AS total_cnt
, COALESCE(SUM(non_vst_cnt), 0) AS non_vst_cnt
, COALESCE(SUM(cmmn_vst_cnt), 0) AS cmmn_vst_cnt
, COALESCE(SUM(cpn_vst_cnt), 0) AS cpn_vst_cnt
FROM
vst_stats
<where>
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
<choose>
<when test="type == 'day'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' DAY
</when>
<when test="type == 'month'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' MONTH
</when>
</choose>
</if>
</where>
<if test="type == 'month'">
group by substring(stats_date::character varying , 0, 8)) as month
</if>
<if test="type == 'year'">
group by substring(stats_date::character varying , 0, 5)) as year
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.24
내용 : 날짜 별 방문자 수 count
-->
<select id="visitSelectListCount" parameterType="HashMap" resultType="int">
<if test="type == 'month' or type == 'year'">
select count(*)
from (
</if>
SELECT
COUNT(*) AS count
FROM
vst_stats
<where>
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
<choose>
<when test="type == 'day'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' DAY
</when>
<when test="type == 'month'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' MONTH
</when>
</choose>
</if>
</where>
<if test="type == 'month'">
group by substring(stats_date::character varying , 0, 8)) as month
</if>
<if test="type == 'year'">
group by substring(stats_date::character varying , 0, 5)) as year
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.28
내용 : 날짜 별 방문자 수(대쉬보드용)
-->
<select id="visitSelectListMain" parameterType="HashMap" resultType="HashMap">
SELECT
stats_date
, non_vst_cnt + cmmn_vst_cnt + cpn_vst_cnt AS total_cnt
, non_vst_cnt
, cmmn_vst_cnt
, cpn_vst_cnt
FROM
vst_stats
WHERE
stats_date >= CURRENT_DATE - INTERVAL '7' DAY
AND
stats_date < CURRENT_DATE
ORDER BY stats_date
OFFSET 0 LIMIT 7
</select>
<!-- **************************************** 방문자 통계 (종료) **************************************** -->
<!-- **************************************** 페이지 통계 (시작) **************************************** -->
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 페이지 접속 로그 등록
-->
<insert id="pageLogInsert" parameterType="HashMap">
INSERT INTO page_acs_log (
page_id
, page_nm
, acs_dt
, user_id
, user_auth
) VALUES (
(SELECT page_id FROM page_info WHERE page_nm = #{page_nm})
, #{page_nm}
, CURRENT_TIMESTAMP
, #{user_id}
, #{user_auth}
)
</insert>
<!--
작성자 : 김성훈
작성일 : 2023.11.23
내용 : 메뉴 별 누적 접속자 수
-->
<select id="accumulatePageAccess" resultType="HashMap">
SELECT
page_info.page_nm
, COALESCE(count , 0) AS count
FROM
page_info
LEFT JOIN ( SELECT
page_id
, COUNT(*)
FROM
page_acs_log
GROUP BY page_id ) AS page_acs_log
ON
page_info.page_id = page_acs_log.page_id
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.23
내용 : 오늘 메뉴 별 접속자 수
-->
<select id="todayPageAccess" resultType="HashMap">
SELECT
page_info.page_nm
, COALESCE(count , 0) AS count
FROM
page_info
LEFT JOIN ( SELECT
page_id
, COUNT(*)
FROM
page_acs_log
WHERE
acs_dt >= CURRENT_DATE :: TIMESTAMP
AND
acs_dt < (CURRENT_DATE + 1) :: TIMESTAMP
GROUP BY page_id ) AS page_acs_log
ON
page_info.page_id = page_acs_log.page_id
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.27
내용 : 페이지 별 접속자 수 (날짜별)
-->
<select id="pageLogListByDate" parameterType="HashMap" resultType="HashMap">
WITH dates AS (
SELECT generate_series(#{startDate}::DATE, #{endDate}::DATE + INTERVAL '1' DAY, '1 day')::DATE AS Download_Date
)
SELECT dates.Download_Date AS date
, page_info.page_info
, page_info.page_nm
, COALESCE(COUNT(page_acs_log.page_id), 0) AS count
FROM
page_info
CROSS JOIN
dates
LEFT JOIN
page_acs_log
ON
page_info.page_id = page_acs_log.page_id
AND
page_acs_log.acs_dt :: DATE = dates.Download_Date
GROUP BY dates.Download_Date, page_info.page_id
ORDER BY dates.download_date ASC, page_info.page_id ASC
</select>
<!-- **************************************** 페이지 통계 (종료) **************************************** -->
<!-- **************************************** 게시글 통계 (시작) **************************************** -->
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 게시글 조회 로그 등록
-->
<insert id="postLogInsert" parameterType="HashMap">
INSERT INTO post_view_log (
post_id
, bbs_id
, view_dt
, user_id
, user_auth
, ctgry_nm
) VALUES (
#{post_id}
, #{bbs_id}
, CURRENT_TIMESTAMP
, #{user_id}
, #{user_auth}
, #{ctgry_nm}
)
</insert>
<!--
작성자 : 김성훈
작성일 : 2023.11.24
내용 : 게시판 별 게시글 조회수 TOP5
-->
<select id="postTop5" parameterType="String" resultType="HashMap">
SELECT
post_title
, view_cnt
, DENSE_RANK () OVER (ORDER BY view_cnt DESC) AS rank
FROM
post
WHERE
bbs_id = #{bbs_id}
AND
use_yn = 'Y'
AND
view_cnt > 0
ORDER BY rank
OFFSET 0 LIMIT 5
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.27
내용 : 게시물 별 접속자 수 (권한별)
-->
<select id="postLogListByDate" parameterType="HashMap" resultType="HashMap">
SELECT
post.post_title
, ( SELECT count(*)
FROM post_view_log
WHERE post_id = post.post_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'company' ) AS company
, ( SELECT count(*)
FROM post_view_log
WHERE post_id = post.post_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'common' ) AS common
<if test='bbs_id == "1" or bbs_id == "2"'>
, ( SELECT count(*)
FROM post_view_log
WHERE post_id = post.post_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'non' ) AS non
</if>
FROM
post
WHERE
bbs_id = #{bbs_id}
AND
use_yn = 'Y'
ORDER BY reg_dt DESC
<if test='excel != "Y"'>
OFFSET #{pagingRowIndex} LIMIT #{perPage}
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.30
내용 : 게시물 별 접속자 총 합계 (권한별)
-->
<select id="postLogTotal" parameterType="HashMap" resultType="HashMap">
SELECT
COALESCE(SUM(( SELECT count(*)
FROM post_view_log
WHERE post_id = post.post_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'company' )), 0) AS company
, COALESCE(SUM(( SELECT count(*)
FROM post_view_log
WHERE post_id = post.post_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'common' )) ,0) AS common
<if test='bbs_id == "1" or bbs_id == "2"'>
, COALESCE(SUM(( SELECT count(*)
FROM post_view_log
WHERE post_id = post.post_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'non' )), 0) AS non
</if>
FROM
post
WHERE
bbs_id = #{bbs_id}
AND
use_yn = 'Y'
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.28
내용 : 게시물 별 접속자 수 (날짜별, 권한별) Count
-->
<select id="postLogListByDateCount" parameterType="HashMap" resultType="int">
SELECT
COUNT(*) as count
FROM
post
WHERE
bbs_id = #{bbs_id}
AND
use_yn = 'Y'
</select>
<!-- **************************************** 게시글 통계 (종료) **************************************** -->
<!-- **************************************** 파일 다운 로드 통계 (시작) **************************************** -->
<!--
작성자 : 김성훈
작성일 : 2023.11.22
내용 : 파일 다운로드 로그 등록
-->
<insert id="fileLogInsert" parameterType="HashMap">
INSERT INTO file_dwld_log (
post_id
, bbs_id
, file_id
, file_sn
, dwld_dt
, user_id
, user_auth
, ctgry_nm
) VALUES (
#{post_id}
, #{bbs_id}
, #{file_id}
, #{file_sn}
, CURRENT_TIMESTAMP
, #{user_id}
, #{user_auth}
, #{ctgry_nm}
)
</insert>
<!--
작성자 : 김성훈
작성일 : 2023.11.28
내용 : 회사소개서 다운로드 로그 등록
-->
<insert id="profileLogInsert" parameterType="HashMap">
INSERT INTO profile_dwld_log (
company_id
, dwld_dt
, user_auth
, user_id
) VALUES (
#{company_id}
, CURRENT_TIMESTAMP
, #{user_auth}
, #{user_id}
)
</insert>
<!--
작성자 : 김성훈
작성일 : 2023.11.28
내용 : 페이지 별 파일 다운로드 수 (날짜별)
-->
<select id="dwldLogListByDate" parameterType="HashMap" resultType="HashMap">
WITH dates AS (
SELECT generate_series(#{startDate}::DATE, #{endDate}::DATE + INTERVAL '1' DAY, '1 day')::DATE AS Download_Date
)
SELECT dates.Download_Date as date
, bbs.bbs_ty
, bbs.bbs_nm
, COALESCE(COUNT(FILE_DWLD_LOG.BBS_ID), 0) AS count
FROM
BBS
CROSS JOIN
dates
LEFT JOIN
FILE_DWLD_LOG
ON
BBS.BBS_ID = FILE_DWLD_LOG.BBS_ID
AND
FILE_DWLD_LOG.DWLD_DT :: DATE = dates.Download_Date
GROUP BY dates.Download_Date, BBS.BBS_ID
ORDER BY dates.download_date ASC, BBS.BBS_ID asc
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.29
내용 : 게시글 별 파일 다운로드 수 통계 (날짜별, 권한별)
-->
<select id="postDwldLogListByDate" parameterType="HashMap" resultType="HashMap">
SELECT
post.post_title
, real_file_nm
, ( SELECT count(*)
FROM file_dwld_log
WHERE file_id = file.file_id
AND file_sn = file.file_sn
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'company' ) AS company
, ( SELECT count(*)
FROM file_dwld_log
WHERE file_id = file.file_id
AND file_sn = file.file_sn
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'common' ) AS common
<if test='bbs_id == "1" or bbs_id == "2"'>
, ( SELECT count(*)
FROM file_dwld_log
WHERE file_id = file.file_id
AND file_sn = file.file_sn
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'non' ) AS non
</if>
FROM
post
JOIN
file
ON
post.file_id = file.file_id
WHERE
bbs_id = #{bbs_id}
AND
post.use_yn = 'Y'
AND
file.use_yn = 'Y'
<if test='bbs_id == "1" or bbs_id == "3"'>
AND file_ty = 'attach'
</if>
ORDER BY reg_dt DESC
OFFSET #{pagingRowIndex} LIMIT #{perPage}
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.30
내용 : 게시글 별 파일 다운로드 수 총 합계 (날짜별, 권한별)
-->
<select id="postDwldLogTotal" parameterType="HashMap" resultType="HashMap">
SELECT
COALESCE(SUM(( SELECT count(*)
FROM file_dwld_log
WHERE post_id = post.post_id
AND file_sn = file.file_sn
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'company' )), 0) AS company
, COALESCE(SUM(( SELECT count(*)
FROM file_dwld_log
WHERE post_id = post.post_id
AND file_sn = file.file_sn
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'common' )), 0) AS common
<if test='bbs_id == "1" or bbs_id == "2"'>
, COALESCE(SUM(( SELECT count(*)
FROM file_dwld_log
WHERE post_id = post.post_id
AND file_sn = file.file_sn
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'non' )), 0) AS non
</if>
FROM
post
JOIN
file
ON
post.file_id = file.file_id
WHERE
bbs_id = #{bbs_id}
AND
post.use_yn = 'Y'
AND
file.use_yn = 'Y'
<if test='bbs_id == "1" or bbs_id == "3"'>
AND file_ty = 'attach'
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.29
내용 : 게시글 별 파일 다운로드 수 통계 (날짜별, 권한별) COUNT
-->
<select id="postDwldLogListByDateCount" parameterType="HashMap" resultType="int">
SELECT
COUNT(*) as count
FROM
post
JOIN
file
ON
post.file_id = file.file_id
WHERE
bbs_id = #{bbs_id}
AND
post.use_yn = 'Y'
AND
file.use_yn = 'Y'
<if test='bbs_id == "1" or bbs_id == "3"'>
AND file_ty = 'attach'
</if>
</select>
<!-- **************************************** 파일 다운 로드 통계 (종료) **************************************** -->
<!--
작성자 : 김성훈
작성일 : 2023.11.24
내용 : 기업 조회수 TOP5
-->
<select id="companyTop5" resultType="HashMap">
SELECT
company_nm
, view_cnt
, DENSE_RANK () OVER (ORDER BY view_cnt DESC) AS rank
FROM
company_users
WHERE
use_yn = 'Y'
AND
view_cnt > 0
ORDER BY rank
OFFSET 0 LIMIT 5
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.27
내용 : 권한 별 로그인 수 (날짜 별)
-->
<select id="loginLogListByDate" parameterType="HashMap" resultType="HashMap">
SELECT
<if test="type == 'day'">
stats_date
, cmmn_login_cnt + cpn_login_cnt as total
, cmmn_login_cnt
, cpn_login_cnt
</if>
<if test="type == 'month'">
substring(stats_date::character varying , 0, 8) as stats_date
, coalesce(sum(cmmn_login_cnt + cpn_login_cnt), 0) AS total
, coalesce(sum(cmmn_login_cnt),0) as cmmn_login_cnt
, coalesce(sum(cpn_login_cnt), 0) as cpn_login_cnt
</if>
<if test="type == 'year'">
substring(stats_date::character varying , 0, 5) as stats_date
, coalesce(sum(cmmn_login_cnt + cpn_login_cnt), 0) AS total
, coalesce(sum(cmmn_login_cnt),0) as cmmn_login_cnt
, coalesce(sum(cpn_login_cnt), 0) as cpn_login_cnt
</if>
FROM
login_stats
<where>
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
<choose>
<when test="type == 'day'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' DAY
</when>
<when test="type == 'month'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' MONTH
</when>
</choose>
</if>
</where>
<if test="type == 'month'">
group by substring(stats_date::character varying , 0, 8)
</if>
<if test="type == 'year'">
group by substring(stats_date::character varying , 0, 5)
</if>
ORDER BY stats_date
<if test='excel != "Y"'>
OFFSET #{pagingRowIndex} LIMIT #{perPage}
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.30
내용 : 어제 날짜 기준 총 로그인 수
-->
<select id="loginSelectTotal" parameterType="HashMap" resultType="HashMap">
<if test="type == 'month' or type == 'year'">
select
COALESCE(SUM(cmmn_login_cnt + cpn_login_cnt), 0) AS total
, COALESCE(SUM(cmmn_login_cnt), 0) AS cmmn_login_cnt
, COALESCE(SUM(cpn_login_cnt), 0) AS cpn_login_cnt
from (
</if>
SELECT
COALESCE(SUM(cmmn_login_cnt + cpn_login_cnt),0) AS total
, COALESCE(SUM(cmmn_login_cnt), 0) AS cmmn_login_cnt
, COALESCE(SUM(cpn_login_cnt), 0) AS cpn_login_cnt
FROM
login_stats
<where>
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
<choose>
<when test="type == 'day'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' DAY
</when>
<when test="type == 'month'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' MONTH
</when>
</choose>
</if>
</where>
<if test="type == 'month'">
group by substring(stats_date::character varying , 0, 8)) as month
</if>
<if test="type == 'year'">
group by substring(stats_date::character varying , 0, 5)) as year
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.28
내용 : 권한 별 로그인 수 (날짜 별) Count
-->
<select id="loginLogListByDateCount" parameterType="HashMap" resultType="int">
<if test="type == 'month' or type == 'year'">
select count(*)
from (
</if>
SELECT
COUNT(*) AS count
FROM
login_stats
<where>
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
<choose>
<when test="type == 'day'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' DAY
</when>
<when test="type == 'month'">
AND
stats_date >= #{startDate}:: DATE
AND
stats_date < #{endDate}:: DATE + INTERVAL '1' MONTH
</when>
</choose>
</if>
</where>
<if test="type == 'month'">
group by substring(stats_date::character varying , 0, 8)) as month
</if>
<if test="type == 'year'">
group by substring(stats_date::character varying , 0, 5)) as year
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.28
내용 : 권한 별 기업 조회 수 (권한 별)
-->
<select id="companyViewListByDate" parameterType="HashMap" resultType="HashMap">
SELECT
company_nm
, ( SELECT count(*)
FROM company_view_log
WHERE company_id = company_users.company_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'company' ) AS company
, ( SELECT count(*)
FROM company_view_log
WHERE company_id = company_users.company_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'common' ) AS common
FROM
company_users
JOIN
users
ON
company_users.user_id = users.user_id
WHERE
users.use_yn = 'Y'
ORDER BY user_reg_dt DESC
<if test='excel != "Y"'>
OFFSET #{pagingRowIndex} LIMIT #{perPage}
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.30
내용 : 권한 별 기업 조회 총 통계 (권한 별)
-->
<select id="companyViewTotal" parameterType="HashMap" resultType="HashMap">
SELECT
COALESCE(SUM(( SELECT count(*)
FROM company_view_log
WHERE company_id = company_users.company_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'company' )), 0) AS company
, COALESCE(SUM(( SELECT count(*)
FROM company_view_log
WHERE company_id = company_users.company_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND view_dt >= #{startDate} :: TIMESTAMP
AND view_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'common' )), 0) AS common
FROM
company_users
JOIN
users
ON
company_users.user_id = users.user_id
WHERE
users.use_yn = 'Y'
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.28
내용 : 권한 별 기업 조회 수 (날짜 별) Count
-->
<select id="companyViewListByDateCount" parameterType="HashMap" resultType="int">
SELECT
COUNT(*) AS count
FROM
company_users
JOIN
users
ON
company_users.user_id = users.user_id
WHERE
users.use_yn = 'Y'
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.29
내용 : 권한 별 기업소개서 다운로드 수 (권한 별)
-->
<select id="profileDwldListByDate" parameterType="HashMap" resultType="HashMap">
SELECT
company_nm
, ( SELECT count(*)
FROM profile_dwld_log
WHERE company_id = company_users.company_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'company' ) AS company
, ( SELECT count(*) FROM profile_dwld_log
WHERE company_id = company_users.company_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'common' ) AS common
FROM
company_users
JOIN
users
ON
company_users.user_id = users.user_id
WHERE
users.use_yn = 'Y'
ORDER BY user_reg_dt DESC
<if test='excel != "Y"'>
OFFSET #{pagingRowIndex} LIMIT #{perPage}
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.30
내용 : 권한 별 기업소개서 다운로드 총 합계 (권한 별)
-->
<select id="profileDwldTotal" parameterType="HashMap" resultType="HashMap">
SELECT
COALESCE(SUM(( SELECT count(*)
FROM profile_dwld_log
WHERE company_id = company_users.company_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'company' )), 0) AS company
, COALESCE(SUM(( SELECT count(*)
FROM profile_dwld_log
WHERE company_id = company_users.company_id
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND dwld_dt >= #{startDate} :: TIMESTAMP
AND dwld_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND user_auth = 'common' )), 0) AS common
FROM
company_users
JOIN
users
ON
company_users.user_id = users.user_id
WHERE
users.use_yn = 'Y'
</select>
<!-- **************************************** PICK & MATCHING 통계 (시작) **************************************** -->
<!--
작성자 : 김성훈
작성일 : 2023.11.29
내용 : 기업 별 pick 통계
-->
<select id="companyPickStatistics" resultType="HashMap">
SELECT
company_nm
, ( SELECT count(*)
FROM networking_complete
WHERE company_id_1 = company_users.company_id
AND use_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND complete_dt >= #{startDate} :: TIMESTAMP
AND complete_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
OR company_id_2 = company_users.company_id
AND use_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND complete_dt >= #{startDate} :: TIMESTAMP
AND complete_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if> ) AS succesee_cnt
, ( SELECT count(*)
FROM networking
WHERE networking_from_id = company_users.company_id
AND refuse_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND networking_dt >= #{startDate} :: TIMESTAMP
AND networking_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
OR networking_to_id = company_users.company_id
AND refuse_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND networking_dt >= #{startDate} :: TIMESTAMP
AND networking_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if> ) AS failed_cnt
, ( SELECT count(*)
FROM networking
WHERE networking_from_id = company_users.company_id
AND use_yn = 'Y'
AND refuse_yn = 'N'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND networking_dt >= #{startDate} :: TIMESTAMP
AND networking_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND ( SELECT EXISTS ( SELECT company_id_1
FROM networking_complete
WHERE company_id_1 = networking_to_id
AND company_id_2 = networking_from_id
AND use_yn = 'Y' )) = false
OR networking_to_id = company_users.company_id
AND use_yn = 'Y'
AND refuse_yn = 'N'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND networking_dt >= #{startDate} :: TIMESTAMP
AND networking_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND ( SELECT EXISTS ( SELECT company_id_1
FROM networking_complete
WHERE company_id_2 = networking_from_id
AND company_id_1 = networking_to_id
AND use_yn = 'Y')) = false ) AS progress_cnt
, ( SELECT count(*)
FROM networking
WHERE networking_to_id = company_users.company_id
AND use_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND networking_dt >= #{startDate} :: TIMESTAMP
AND networking_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>) AS to_cnt
, ( SELECT count(*)
FROM networking
WHERE networking_from_id = company_users.company_id
AND use_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND networking_dt >= #{startDate} :: TIMESTAMP
AND networking_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>) AS from_cnt
FROM
company_users
JOIN
users
ON
company_users.user_id = users.user_id
WHERE
company_users.use_yn = 'Y'
AND
create_account_approval = 'Y'
AND
users.use_yn = 'Y'
ORDER BY user_reg_dt DESC
<if test='excel != "Y"'>
OFFSET #{pagingRowIndex} LIMIT #{perPage}
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.29
내용 : 기업 별 matching 통계
-->
<select id="companyMatchingStatistics" resultType="HashMap">
SELECT
company_nm
, (
SELECT count(*)
FROM matching_complete
WHERE company_id_1 = company_users.company_id
AND use_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND complete_dt >= #{startDate} :: TIMESTAMP
AND complete_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
OR company_id_2 = company_users.company_id
AND use_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND complete_dt >= #{startDate} :: TIMESTAMP
AND complete_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
) AS succesee_cnt
, (
SELECT count(*)
FROM matching_info
WHERE matching_from_id = company_users.company_id
AND refuse_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND matching_dt >= #{startDate} :: TIMESTAMP
AND matching_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
OR matching_to_id = company_users.company_id
AND refuse_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND matching_dt >= #{startDate} :: TIMESTAMP
AND matching_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
) AS failed_cnt
, (
SELECT count(*)
FROM matching_complete
WHERE company_id_1 = company_users.company_id
AND use_yn = 'N'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND complete_dt >= #{startDate} :: TIMESTAMP
AND complete_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
OR company_id_2 = company_users.company_id
AND use_yn = 'N'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND complete_dt >= #{startDate} :: TIMESTAMP
AND complete_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
) as complete_failded_cnt
, (
SELECT count(*)
FROM matching_info
WHERE matching_from_id = company_users.company_id
AND use_yn = 'Y'
AND refuse_yn = 'N'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND matching_dt >= #{startDate} :: TIMESTAMP
AND matching_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND ( SELECT EXISTS ( SELECT company_id_1
FROM matching_complete
WHERE company_id_1 = company_users.company_id
AND company_id_2 = matching_to_id
AND use_yn = 'Y'
OR company_id_2 = company_users.company_id
AND company_id_1 = matching_to_id
AND use_yn = 'Y')) = false
OR matching_to_id = company_users.company_id
AND use_yn = 'Y'
AND refuse_yn = 'N'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND matching_dt >= #{startDate} :: TIMESTAMP
AND matching_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if>
AND ( SELECT EXISTS ( SELECT company_id_1
FROM matching_complete
WHERE company_id_1 = company_users.company_id
AND company_id_2 = matching_from_id
AND use_yn = 'Y'
OR company_id_2 = company_users.company_id
AND company_id_1 = matching_from_id
AND use_yn = 'Y')) = false ) AS progress_cnt
, ( SELECT count(*)
FROM matching_info
WHERE matching_to_id = company_users.company_id
AND use_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND matching_dt >= #{startDate} :: TIMESTAMP
AND matching_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if> ) AS to_cnt
, ( SELECT count(*)
FROM matching_complete
WHERE company_id_1 = company_users.company_id
AND use_yn = 'N'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND matching_dt >= #{startDate} :: TIMESTAMP
AND matching_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if> ) AS com_to_cnt
, ( SELECT count(*)
FROM matching_info
WHERE matching_from_id = company_users.company_id
AND use_yn = 'Y'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND matching_dt >= #{startDate} :: TIMESTAMP
AND matching_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if> ) AS from_cnt
, ( SELECT count(*)
FROM matching_complete
WHERE company_id_2 = company_users.company_id
AND use_yn = 'N'
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND matching_dt >= #{startDate} :: TIMESTAMP
AND matching_dt < #{endDate} :: TIMESTAMP + INTERVAL '1' DAY
</if> ) AS com_from_cnt
FROM
company_users
JOIN
users
ON
company_users.user_id = users.user_id
WHERE
company_users.use_yn = 'Y'
AND
create_account_approval = 'Y'
AND
users.use_yn = 'Y'
ORDER BY user_reg_dt DESC
<if test='excel != "Y"'>
OFFSET #{pagingRowIndex} LIMIT #{perPage}
</if>
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.29
내용 : 기업 목록 COUNT SQL
-->
<select id="companySelectListCount" resultType="int">
SELECT
COUNT(*) as count
FROM
company_users a
JOIN
users
ON
a.user_id = users.user_id
WHERE
a.use_yn = 'Y'
AND
create_account_approval = 'Y'
</select>
<!--
작성자 : 김성훈
작성일 : 2023.11.29
내용 : 기업명 목록 SQL
-->
<select id="companyNameSelectList" resultType="HashMap">
SELECT
company_id
, company_nm
FROM
company_users a
JOIN
users
ON
a.user_id = users.user_id
WHERE
a.use_yn = 'Y'
AND
create_account_approval = 'Y'
ORDER BY company_pick_cnt DESC, view_cnt DESC, company_nm
</select>
<!--
작성자 : 김성훈
작성일 : 2023.12.04
내용 : 선택기업 픽 세부통계
-->
<select id="companyDetailPickStatistics" parameterType="HashMap" resultType="HashMap">
SELECT
company_nm
, 'dispatch' AS division
, networking_dt
, ( SELECT EXISTS ( SELECT company_id_1
FROM networking_complete
WHERE company_id_1 = networking_to_id
AND company_id_2 = #{company_id})) AS complete_yn
, refuse_yn
FROM
networking
JOIN
company_users
ON
networking.networking_to_id = company_users.company_id
WHERE
networking_from_id = #{company_id}
AND
networking.use_yn = 'Y'
UNION ALL
SELECT
company_nm
, 'reception' AS division
, networking_dt
, ( SELECT EXISTS ( SELECT company_id_1
FROM networking_complete
WHERE company_id_1 = #{company_id}
AND company_id_2 = networking_from_id )) AS complete_yn
, refuse_yn
FROM
networking
JOIN
company_users
ON
networking.networking_from_id = company_users.company_id
WHERE
networking_to_id = #{company_id}
AND
networking.use_yn = 'Y'
ORDER BY company_nm, networking_dt DESC
</select>
<!--
작성자 : 김성훈
작성일 : 2023.12.05
내용 : 선택기업 매칭 세부통계
-->
<select id="companyDetailMatchingStatistics" parameterType="HashMap" resultType="HashMap">
SELECT
company_nm
, 'dispatch' AS division
, matching_dt
, ( SELECT EXISTS ( SELECT company_id_1
FROM matching_complete
WHERE company_id_1 = matching_to_id
AND company_id_2 = #{company_id})) AS complete_yn
, complete_cancel_yn
, refuse_yn
FROM
matching_info
JOIN
company_users
ON
matching_info.matching_to_id = company_users.company_id
WHERE
matching_from_id = #{company_id}
AND
matching_info.use_yn = 'Y'
OR
matching_from_id = #{company_id}
AND
matching_info.complete_cancel_yn = 'Y'
UNION ALL
SELECT
company_nm
, 'reception' AS division
, matching_dt
, ( SELECT EXISTS ( SELECT company_id_1
FROM matching_complete
WHERE company_id_1 = #{company_id}
AND company_id_2 = matching_from_id )) AS complete_yn
, complete_cancel_yn
, refuse_yn
FROM
matching_info
JOIN
company_users
ON
matching_info.matching_from_id = company_users.company_id
WHERE
matching_to_id = #{company_id}
AND
matching_info.use_yn = 'Y'
OR
matching_to_id = #{company_id}
AND
matching_info.complete_cancel_yn = 'Y'
ORDER BY company_nm, matching_dt DESC
</select>
<!-- **************************************** PICK & MATCHING 통계 (종료) **************************************** -->
<!--
작성자 : 김성훈
작성일 : 2023.11.30
내용 : page_acs_log 테이블에서 가장 빠른 날짜 찾기
-->
<select id="minDate" resultType="String">
SELECT
min(acs_dt) :: DATE
FROM
page_acs_log
</select>
</mapper>