Mysql查询三张表

标签 mysql sql

我正在尝试编写一个连接三个表的查询。 正如您在下图中看到的那样:

  • 用户表
  • 费用表
  • 费用类别表

我需要获取一个按类别类型对费用进行分组的结果表(图像上的结果表)。

enter image description here

select users.email,
(
    SELECT IFNULL(sum(expenses.amount),0)
    FROM expenses
    JOIN expense_categories as cat
    ON cat.id  = expenses.category_id
    AND cat.type = 'home'
    WHERE expenses.user_id = users.id
) as 'home expenses'
from users

此查询工作正常,但我确信这不是正确的方法。

你能帮我吗?

非常感谢

最佳答案

您想要的查询具有 join 和一个聚合:

SELECT u.id, u.email,
       SUM(CASE WHEN ec.type = 'home' THEN e.amount ELSE 0 END) as home, 
       SUM(CASE WHEN ec.type = 'job' THEN e.amount ELSE 0 END) as job 
FROM users u LEFT JOIN
     expenses e
     ON u.id = e.user_id LEFT JOIN
     expense_categories ec
     ON ec.id  = e.category_id
GROUP BY u.id, u.email;

关于Mysql查询三张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46039783/

相关文章:

mysql - 连接到 MySQL 时 SonarQube 未启动

mysql - 如何在 TomEE 中的 java 应用程序中连接 MySQL 数据库

python - 在python中以xml格式返回sql查询

mysql - 查询中的平均值 - mysql

php - 如何创建一个使用 cookie 登录的 php 页面?

mysql - 插入或更新(如果存在带有键的行)一组行

mysql:使用 group by 时非分组项崩溃

sql - 有没有一种方法可以建立三元关系,其中三个实体之一一次只与另外两个实体中的一个相关联?

sql - 创建表时 IDENTITY NOT NULL

php - 我无法让我的 PHP "else"条件 block 工作