[英]Why doesn't my SQL query run in PgAdmin 4 but runs in SQL editor online
为什么这两个代码不在 PgAdmin 4 上运行? 我已经有了 HR 数据库。 当我添加小时。 在工作和员工上,下一个错误是:错误:CASE 类型数字和文本无法匹配
第 8 行:'+' || (e.salary - ((j.min_salary + j.max_salary)/2))
https://www.sqltutorial.org/sql-sample-database/
SELECT e.first_name,
e.last_name,
j.job_title,
cast(e.salary AS varchar) salary,
cast(((j.min_salary + j.max_salary)/2) AS varchar) average_salary,
cast( (case
WHEN e.salary > ((j.min_salary + j.max_salary)/2) THEN
'+' || (e.salary - ((j.min_salary + j.max_salary)/2))
WHEN e.salary = ((j.min_salary + j.max_salary)/2) THEN
'0'
ELSE (e.salary-((j.min_salary + j.max_salary)/2)) end) AS varchar) class_difference
FROM employees e
LEFT JOIN jobs j
ON e.job_id = j.job_id
ORDER BY job_title, salary
==================================================== ==========================================
with averages AS
(SELECT job_id,
job_title,
((min_salary + max_salary)/2) average
FROM jobs
GROUP BY job_id)
SELECT employee_id,
first_name,
last_name,
a.job_title,
cast(salary AS varchar) salary,
cast(a.average AS varchar) avg_salary,
cast((case
WHEN (salary - a.average > 0) THEN
'+' || (salary - a.average)
WHEN (salary - a.average = 0) THEN
'0'
ELSE (salary - a.average) end) AS varchar) salary_class_diff
FROM employees e
LEFT JOIN averages a
ON e.job_id = a.job_id
ORDER BY a.job_title, salary
你能试试这个:
with averages AS
(SELECT job_id,
job_title,
((min_salary + max_salary)/2) average
FROM jobs
GROUP BY job_id)
SELECT employee_id,
first_name,
last_name,
a.job_title,
cast(salary AS varchar) salary,
cast(a.average AS varchar) avg_salary,
cast((case
WHEN (salary - a.average > 0) THEN
'+' || cast((salary - a.average) AS varchar)
WHEN (salary - a.average = 0) THEN
'0'
ELSE cast((salary - a.average) as varchar) end) AS varchar) salary_class_diff
FROM employees e
LEFT JOIN averages a
ON e.job_id = a.job_id
ORDER BY a.job_title, salary;
和这个:
SELECT e.first_name,
e.last_name,
j.job_title,
cast(e.salary AS varchar) salary,
cast(((j.min_salary + j.max_salary)/2) AS varchar) average_salary,
cast( (case
WHEN e.salary > ((j.min_salary + j.max_salary)/2) THEN
'+' || cast((e.salary - ((j.min_salary + j.max_salary)/2)) AS varchar)
WHEN e.salary = ((j.min_salary + j.max_salary)/2) THEN
'0'
ELSE cast((e.salary-((j.min_salary + j.max_salary)/2)) as varchar) end) AS varchar) class_difference
FROM employees e
LEFT JOIN jobs j
ON e.job_id = j.job_id
ORDER BY job_title, salary;
问题是您试图连接字符串值('+')和数值(salary - a.average)。 我不知道 sqltutorial 如何处理这种情况,但显然 PgAdmin4 无法处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.