【问题标题】:Aggregate query on mysql 8mysql 8上的聚合查询
【发布时间】:2021-02-22 12:22:44
【问题描述】:

我有两张桌子,津贴和工资,

津贴表的样子,

Id  Title       value
1   Transport   2000
2   Housing     1000
3   Housing     1000

工资表,

    id  Salary
    1   2000
    2   1000
    3   3000

对于没有住房津贴的身份证,该值应被视为住房的0,并且应仅显示工资。如果有住房补贴,加起来工资和住房。

我的查询没有给出正确的输出,

SELECT 
    s.id,
    CASE
        WHEN t.`Housing` = 0 THEN s.salary
    END AS Salary,
    CASE
        WHEN t.`Housing` <> 0 THEN t.Housing + s.salary
        WHEN t.`Housing` = 0 THEN  s.salary
    END AS SalaryAndHousing
FROM
    (SELECT 
        id,
            CASE
                WHEN Title = 'Housing' THEN value
                WHEN Title <> 'Housing' THEN 0
            END AS 'Housing'
    FROM
        Allowance) t
        JOIN
    Salaries s ON (t.id = s.id);

我的查询的输出是,

id  Salary  SalaryAndHousing
1    2000        2000
2    null        2000
3    null        4000

它应该看起来像,

   id        Salary    SalaryAndHousing
    1         2000          2000 -- 2000 + 0
    2         1000          2000 -- 1000 + 1000
    3         3000          4000 -- 1000 + 3000

dbfiddle

【问题讨论】:

  • salary 只会在 WHEN t.Housing = 0 时打印 - 当然你总是想要薪水..

标签: mysql mysql-8.0


【解决方案1】:

这是一个非常简单的查询:

select 
    s.id,
    s.Salary,
    s.Salary + coalesce(a.value, 0) SalaryAndHousing
from Salaries s 
left join Allowance a on a.id = s.id and a.Title = 'Housing'
order by s.id;

试试SQLize.online

【讨论】:

  • 谢谢,但我需要两列而不是一列,如我想要的结果所示。
  • 是的。刚刚更新
猜你喜欢
  • 2019-11-10
  • 2021-09-10
  • 2010-10-23
  • 2010-10-29
  • 2017-04-04
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多