繁体   English   中英

为什么我的 SQL 查询不在 PgAdmin 4 中运行,而是在在线 SQL 编辑器中运行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM