posting_date BETWEEN #{startTime} AND #{endTime}
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
SELECT COUNT(DISTINCT SUBSTRING(industry FROM 1 FOR 3))
FROM theme_recruitment_job
WHERE
SELECT COUNT(DISTINCT code)
FROM theme_recruitment_job
WHERE
SELECT COALESCE(SUM(vacancies), 0)
FROM theme_recruitment_job
WHERE
SELECT COUNT(DISTINCT job_id)
FROM theme_recruitment_job
WHERE
SELECT
COALESCE(ROUND(AVG(((min_salary + max_salary)/2)), 2), 0)
FROM theme_recruitment_job
WHERE
WITH params AS (
SELECT CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) AS current_year
),
-- 一次性生成两年(当前年、去年)的所有月度时间范围
month_ranges AS (
SELECT
m.month_num,
(make_timestamp(p.current_year - month_num + 1, 1, 1, 0, 0, 0) ) AS start_time,
(make_timestamp(p.current_year - month_num + 1 , 12, 31, 23, 59, 59) ) AS end_time
FROM params p
CROSS JOIN (SELECT generate_series(1, 5) AS month_num) m
),
-- 一次扫描表,按条件区分当前年和去年数据
aggregated_data AS (
SELECT
r.month_num,
COALESCE(SUM(vacancies), 0) AS laborDemandCount
FROM month_ranges r
LEFT JOIN theme_recruitment_job
ON
posting_date BETWEEN r.start_time AND r.end_time
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
GROUP BY r.month_num
)
SELECT
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) AS code,
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) AS sort,
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) || '年' AS "desc",
COALESCE(laborDemandCount, 0) AS laborDemandCount
FROM aggregated_data
ORDER BY sort ;
WITH params AS (
SELECT CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) AS current_year
),
-- 一次性生成两年(当前年、去年)的所有月度时间范围
month_ranges AS (
SELECT
m.month_num,
(make_timestamp(p.current_year , 1, 1, 0, 0, 0)
+ (m.month_num - 1) * 3 * INTERVAL '1 month') AS start_time,
(make_timestamp(p.current_year , 1, 1, 0, 0, 0)
+ m.month_num * 3 * INTERVAL '1 month' - INTERVAL '1 second') AS end_time
FROM params p
CROSS JOIN (SELECT generate_series(1, 4) AS month_num) m
),
-- 一次扫描表,按条件区分当前年和去年数据
aggregated_data AS (
SELECT
r.month_num,
COALESCE(SUM(vacancies), 0) AS laborDemandCount
FROM month_ranges r
LEFT JOIN theme_recruitment_job
ON
posting_date BETWEEN r.start_time AND r.end_time
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
GROUP BY r.month_num
)
SELECT
month_num AS code,
month_num AS sort,
'第' || month_num || '季度' AS "desc",
COALESCE(laborDemandCount, 0) AS laborDemandCount
FROM aggregated_data
ORDER BY month_num;
WITH params AS (
SELECT CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) AS current_year
),
-- 一次性生成两年(当前年、去年)的所有月度时间范围
month_ranges AS (
SELECT
m.month_num,
(make_timestamp(p.current_year , 1, 1, 0, 0, 0)
+ (m.month_num - 1) * INTERVAL '1 month') AS start_time,
(make_timestamp(p.current_year , 1, 1, 0, 0, 0)
+ m.month_num * INTERVAL '1 month' - INTERVAL '1 second') AS end_time
FROM params p
CROSS JOIN (SELECT generate_series(1, 12) AS month_num) m
),
-- 一次扫描表,按条件区分当前年和去年数据
aggregated_data AS (
SELECT
r.month_num,
COALESCE(SUM(vacancies), 0) AS laborDemandCount
FROM month_ranges r
LEFT JOIN theme_recruitment_job
ON
posting_date BETWEEN r.start_time AND r.end_time
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
GROUP BY r.month_num
)
SELECT
month_num AS code,
month_num AS sort,
month_num || '月' AS "desc",
COALESCE(laborDemandCount, 0) AS laborDemandCount
FROM aggregated_data
ORDER BY month_num;
SELECT
code,
COALESCE(SUM(vacancies), 0) AS count
FROM (
SELECT
vacancies,
SUBSTRING(industry FROM 1 FOR 3) AS code
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY code
ORDER BY code
SELECT
code,
COALESCE(ROUND(AVG((salary)), 2), 0) AS amount,
COALESCE(ROUND((PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary))::NUMERIC, 2), 0) AS anotherAmount
FROM (
SELECT
industry AS code,
(min_salary + max_salary)/2 AS salary
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY code
ORDER BY code
SELECT
code,
COALESCE(SUM(vacancies), 0) AS count
FROM (
SELECT
vacancies,
job_category AS code
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY code
ORDER BY code
SELECT
code,
COALESCE(SUM(vacancies), 0) AS count
FROM (
SELECT
vacancies,
SUBSTRING(industry FROM 1 FOR 3) AS code
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY code
ORDER BY code
SELECT
areaCode,
COUNT(DISTINCT code) AS count
FROM (
SELECT
code,
job_location_area_code AS areaCode
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY areaCode
ORDER BY areaCode
WITH params AS (
SELECT CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) AS current_year
),
-- 一次性生成两年(当前年、去年)的所有月度时间范围
month_ranges AS (
SELECT
m.month_num,
y.year_offset,
(make_timestamp(p.current_year - y.year_offset - month_num + 1, 1, 1, 0, 0, 0) ) AS start_time,
(make_timestamp(p.current_year - month_num + 1 , 12, 31, 23, 59, 59) ) AS end_time
FROM params p
CROSS JOIN (SELECT 0 AS year_offset UNION ALL SELECT 1) y
CROSS JOIN (SELECT generate_series(1, 5) AS month_num) m
),
-- 一次扫描表,按条件区分当前年和去年数据
aggregated_data AS (
SELECT
r.month_num,
COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count,
COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count
FROM month_ranges r
LEFT JOIN theme_recruitment_job
ON
posting_date BETWEEN r.start_time AND r.end_time
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
GROUP BY r.month_num
)
SELECT
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) AS code,
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) AS sort,
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) || '年' AS "desc",
COALESCE(current_count, 0) AS currentCount,
COALESCE(last_count, 0) AS lastYearCount
FROM aggregated_data
ORDER BY sort ;
WITH params AS (
SELECT CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) AS current_year
),
-- 一次性生成两年(当前年、去年)的所有月度时间范围
month_ranges AS (
SELECT
m.month_num,
y.year_offset,
(make_timestamp(p.current_year - y.year_offset, 1, 1, 0, 0, 0)
+ (m.month_num - 1) * 3 * INTERVAL '1 month') AS start_time,
(make_timestamp(p.current_year - y.year_offset, 1, 1, 0, 0, 0)
+ m.month_num * 3 * INTERVAL '1 month' - INTERVAL '1 second') AS end_time
FROM params p
CROSS JOIN (SELECT 0 AS year_offset UNION ALL SELECT 1) y
CROSS JOIN (SELECT generate_series(1, 4) AS month_num) m
),
-- 一次扫描表,按条件区分当前年和去年数据
aggregated_data AS (
SELECT
r.month_num,
COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count,
COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count
FROM month_ranges r
LEFT JOIN theme_recruitment_job
ON
posting_date BETWEEN r.start_time AND r.end_time
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
GROUP BY r.month_num
)
SELECT
month_num AS code,
month_num AS sort,
'第' || month_num || '季度' AS "desc",
COALESCE(current_count, 0) AS currentCount,
COALESCE(last_count, 0) AS lastYearCount
FROM aggregated_data
ORDER BY month_num;
WITH params AS (
SELECT CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) AS current_year
),
-- 一次性生成两年(当前年、去年)的所有月度时间范围
month_ranges AS (
SELECT
m.month_num,
y.year_offset,
(make_timestamp(p.current_year - y.year_offset, 1, 1, 0, 0, 0)
+ (m.month_num - 1) * INTERVAL '1 month') AS start_time,
(make_timestamp(p.current_year - y.year_offset, 1, 1, 0, 0, 0)
+ m.month_num * INTERVAL '1 month' - INTERVAL '1 second') AS end_time
FROM params p
CROSS JOIN (SELECT 0 AS year_offset UNION ALL SELECT 1) y
CROSS JOIN (SELECT generate_series(1, 12) AS month_num) m
),
-- 一次扫描表,按条件区分当前年和去年数据
aggregated_data AS (
SELECT
r.month_num,
COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count,
COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count
FROM month_ranges r
LEFT JOIN theme_recruitment_job
ON
posting_date BETWEEN r.start_time AND r.end_time
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
GROUP BY r.month_num
)
SELECT
month_num AS code,
month_num AS sort,
month_num || '月' AS "desc",
COALESCE(current_count, 0) AS currentCount,
COALESCE(last_count, 0) AS lastYearCount
FROM aggregated_data
ORDER BY month_num;
SELECT
code,
COALESCE(SUM(vacancies), 0) AS count
FROM (
SELECT
vacancies,
SUBSTRING(industry FROM 1 FOR 3) AS code
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY code
ORDER BY code
WITH params AS (
SELECT CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) AS current_year
),
-- 一次性生成两年(当前年、去年)的所有月度时间范围
month_ranges AS (
SELECT
m.month_num,
y.year_offset,
(make_timestamp(p.current_year - y.year_offset - month_num + 1, 1, 1, 0, 0, 0) ) AS start_time,
(make_timestamp(p.current_year - month_num + 1 , 12, 31, 23, 59, 59) ) AS end_time
FROM params p
CROSS JOIN (SELECT 0 AS year_offset UNION ALL SELECT 1) y
CROSS JOIN (SELECT generate_series(1, 5) AS month_num) m
),
-- 一次扫描表,按条件区分当前年和去年数据
aggregated_data AS (
SELECT
r.month_num,
SUBSTRING(industry FROM 1 FOR 3) AS another_code,
COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count,
COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count
FROM month_ranges r
LEFT JOIN theme_recruitment_job
ON
posting_date BETWEEN r.start_time AND r.end_time
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
GROUP BY r.month_num,SUBSTRING(industry FROM 1 FOR 3)
)
SELECT
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) AS code,
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) AS sort,
(CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) +1 - month_num) || '年' AS "desc",
another_code AS anotherCode,
COALESCE(current_count, 0) AS currentCount,
COALESCE(last_count, 0) AS lastYearCount
FROM aggregated_data
ORDER BY sort ;
WITH params AS (
SELECT CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) AS current_year
),
-- 一次性生成两年(当前年、去年)的所有月度时间范围
month_ranges AS (
SELECT
m.month_num,
y.year_offset,
(make_timestamp(p.current_year - y.year_offset, 1, 1, 0, 0, 0)
+ (m.month_num - 1) * 3 * INTERVAL '1 month') AS start_time,
(make_timestamp(p.current_year - y.year_offset, 1, 1, 0, 0, 0)
+ m.month_num * 3 * INTERVAL '1 month' - INTERVAL '1 second') AS end_time
FROM params p
CROSS JOIN (SELECT 0 AS year_offset UNION ALL SELECT 1) y
CROSS JOIN (SELECT generate_series(1, 4) AS month_num) m
),
-- 一次扫描表,按条件区分当前年和去年数据
aggregated_data AS (
SELECT
r.month_num,
SUBSTRING(industry FROM 1 FOR 3) AS another_code,
COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count,
COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count
FROM month_ranges r
LEFT JOIN theme_recruitment_job
ON
posting_date BETWEEN r.start_time AND r.end_time
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
GROUP BY r.month_num,SUBSTRING(industry FROM 1 FOR 3)
)
SELECT
month_num AS code,
month_num AS sort,
'第' || month_num || '季度' AS "desc",
another_code AS anotherCode,
COALESCE(current_count, 0) AS currentCount,
COALESCE(last_count, 0) AS lastYearCount
FROM aggregated_data
ORDER BY month_num;
WITH params AS (
SELECT CAST(EXTRACT(YEAR FROM #{endTime}) AS INT) AS current_year
),
-- 一次性生成两年(当前年、去年)的所有月度时间范围
month_ranges AS (
SELECT
m.month_num,
y.year_offset,
(make_timestamp(p.current_year - y.year_offset, 1, 1, 0, 0, 0)
+ (m.month_num - 1) * INTERVAL '1 month') AS start_time,
(make_timestamp(p.current_year - y.year_offset, 1, 1, 0, 0, 0)
+ m.month_num * INTERVAL '1 month' - INTERVAL '1 second') AS end_time
FROM params p
CROSS JOIN (SELECT 0 AS year_offset UNION ALL SELECT 1) y
CROSS JOIN (SELECT generate_series(1, 12) AS month_num) m
),
-- 一次扫描表,按条件区分当前年和去年数据
aggregated_data AS (
SELECT
r.month_num,
SUBSTRING(industry FROM 1 FOR 3) AS another_code,
COALESCE(SUM(CASE WHEN r.year_offset = 0 THEN vacancies END), 0) AS current_count,
COALESCE(SUM(CASE WHEN r.year_offset = 1 THEN vacancies END), 0) AS last_count
FROM month_ranges r
LEFT JOIN theme_recruitment_job
ON
posting_date BETWEEN r.start_time AND r.end_time
AND job_location_area_code = #{area}
AND industry LIKE #{industry} || '%'
AND (
industry LIKE #{industry} || '%'
)
GROUP BY r.month_num,SUBSTRING(industry FROM 1 FOR 3)
)
SELECT
month_num AS code,
month_num AS sort,
month_num || '月' AS "desc",
another_code AS anotherCode,
COALESCE(current_count, 0) AS currentCount,
COALESCE(last_count, 0) AS lastYearCount
FROM aggregated_data
ORDER BY month_num;
SELECT
code,
COALESCE(SUM(vacancies), 0) AS count
FROM (
SELECT
vacancies,
nature AS code
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY code
ORDER BY code
SELECT
code,
anotherCode,
COALESCE(SUM(vacancies), 0) AS currentCount
FROM (
SELECT
vacancies,
nature AS code,
recruitment_way AS anotherCode
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY code,anotherCode
ORDER BY code,anotherCode
SELECT
code,
anotherCode,
COALESCE(SUM(vacancies), 0) AS currentCount
FROM (
SELECT
vacancies,
nature AS code,
education AS anotherCode
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY code,anotherCode
ORDER BY code,anotherCode
SELECT
code,
COALESCE(SUM(vacancies), 0) AS count
FROM (
SELECT
vacancies,
job_location_area_code AS code
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY code
ORDER BY code
SELECT
code,
"desc",
count
FROM(
SELECT
"desc" AS code,
"desc",
COALESCE(SUM(vacancies), 0) AS count
FROM (
SELECT
vacancies,
CASE
WHEN COALESCE(ROUND(((min_salary + max_salary)/2), 0), 0) < 5000 THEN '5K以下'
WHEN COALESCE(ROUND(((min_salary + max_salary)/2), 0), 0) BETWEEN 5000 AND 8000 THEN '5-8K'
WHEN COALESCE(ROUND(((min_salary + max_salary)/2), 0), 0) BETWEEN 8001 AND 12000 THEN '8-12K'
WHEN COALESCE(ROUND(((min_salary + max_salary)/2), 0), 0) BETWEEN 12001 AND 15000 THEN '12-15K'
WHEN COALESCE(ROUND(((min_salary + max_salary)/2), 0), 0) > 15000 THEN '15K以上'
ELSE '未知'
END AS "desc"
FROM theme_recruitment_job
WHERE
) subquery
GROUP BY "desc"
)
WHERE
count > 0
ORDER BY
CASE "desc"
WHEN '5K以下' THEN 1
WHEN '5-8K' THEN 2
WHEN '8-12K' THEN 3
WHEN '12-15K' THEN 4
WHEN '15K以上' THEN 5
ELSE 6
END