mysql - 左连接重复并计算所有行
问题描述
我正在尝试以不同的结果执行下面的查询,但没有成功。
SELECT a.Nome
,c.Saldo
,COUNT(d.Apostador_ID) AS Depositos
,COUNT(s.Apostador_ID) AS Saques
FROM Apostadores a
LEFT JOIN Contas c ON a.ID = c.Apostador_ID
LEFT JOIN Deposito d ON a.ID = d.Apostador_ID
LEFT JOIN Saque s ON a.ID = s.Apostador_ID
GROUP BY a.Nome, c.Saldo
它正在返回:
Nome Saldo Depositos Saques
Marcos 4857 180 180
Paulo 2868 180 180
Mariana 8348 180 180
Marcela -3512 180 180
Mario -2367 180 180
Maria -3359 180 180
但是每个人的结果应该是 27。
谢谢!!
编辑 1:
INSERT INTO Apostadores
(`ID`, `Nome`, `CPF`, `Email`)
VALUES
(NULL, 'Marcos', '12345678901', 'marcos@email.com'),
(NULL, 'Paulo', '12345678902', 'paulo@email.com'),
(NULL, 'Mariana', '12345678903', 'mariana@email.com'),
(NULL, 'Marcela', '12345678904', 'marcela@email.com'),
(NULL, 'Mario', '12345678905', 'mario@email.com'),
(NULL, 'Maria', '12345678906', 'maria@email.com');
INSERT INTO Contas
(`ID`, `Apostador_ID`, `Saldo`)
VALUES
(NULL, '1', '700.00'),
(NULL, '2', '1000.00'),
(NULL, '3', '5000.00'),
(NULL, '4', '250.00'),
(NULL, '5', '365.00'),
(NULL, '6', '391.82');
INSERT INTO Deposito
(`ID`, `Apostador_ID`, `Valor_Depositado`)
VALUES
(NULL, '1', '700'),
(NULL, '2', '900'),
(NULL, '3', '580'),
(NULL, '4', '260'),
(NULL, '5', '360'),
(NULL, '6', '154'),
(NULL, '1', '1000'),
(NULL, '2', '1346'),
(NULL, '3', '2005'),
(NULL, '4', '360'),
(NULL, '5', '392'),
(NULL, '6', '182'),
(NULL, '1', '362'),
(NULL, '2', '182'),
(NULL, '3', '270'),
(NULL, '4', '390'),
(NULL, '5', '160'),
(NULL, '6', '380'),
(NULL, '1', '290'),
(NULL, '2', '370'),
(NULL, '3', '193'),
(NULL, '4', '256'),
(NULL, '5', '509'),
(NULL, '6', '536'),
(NULL, '1', '500'),
(NULL, '2', '190'),
(NULL, '3', '160'),
(NULL, '4', '380'),
(NULL, '5', '190'),
(NULL, '6', '170');
INSERT INTO Saque
(`ID`, `Apostador_ID`, `Valor_Sacado`)
VALUES
(NULL, '1', '100'),
(NULL, '2', '200'),
(NULL, '3', '100'),
(NULL, '4', '50'),
(NULL, '5', '55'),
(NULL, '6', '70'),
(NULL, '1', '80'),
(NULL, '2', '90'),
(NULL, '3', '65'),
(NULL, '4', '55'),
(NULL, '5', '45'),
(NULL, '6', '60'),
(NULL, '1', '35'),
(NULL, '2', '61'),
(NULL, '3', '99'),
(NULL, '4', '66'),
(NULL, '5', '55'),
(NULL, '6', '33'),
(NULL, '1', '88'),
(NULL, '2', '15'),
(NULL, '3', '20'),
(NULL, '4', '29'),
(NULL, '5', '36'),
(NULL, '6', '58');
这是上面的示例。我添加了 4 个表,Apostadores、Depositos、Saque 和 Contas。我试过 DISTINCT 没有成功。
编辑2:如果我尝试下面的查询,我可以获得所有行的正确值,但是如果我按照下面的查询再进行一次连接,它会带来错误的值
SELECT a.Nome
,c.Saldo
,COUNT(d.ID)
FROM Apostadores a
LEFT JOIN Contas c ON a.ID = c.Apostador_ID
LEFT JOIN Depositos d ON a.ID = d.Apostador_ID
GROUP BY a.Nome, c.Saldo
这是带来错误值的查询。
SELECT a.Nome
,c.Saldo
,COUNT(d.ID)
,COUNT(s.ID)
FROM Apostadores a
LEFT JOIN Contas c ON a.ID = c.Apostador_ID
LEFT JOIN Depositos d ON a.ID = d.Apostador_ID
LEFT JOIN Saques s ON a.ID = s.Apostador_ID
GROUP BY a.Nome, c.Saldo
解决方案
我在下面的查询中更改了一些我不知道是什么的东西,现在它正在工作!!
谢谢您的帮助!!
SELECT a.Nome
,c.Saldo
,COUNT(DISTINCT d.ID) AS Depositos
,COUNT(DISTINCT s.ID) AS Saques
,SUM(d.Valor_Depositado) AS Valor_Depositado
,SUM(s.Valor_Sacado) AS Valor_Sacado
,COUNT(DISTINCT t.ID) AS Transferencias_Efetuadas
,SUM(t.Valor_Transferido) AS Valor_Enviado_Transferencia
,COUNT(DISTINCT ap.ID) AS Quantidade_Apostas
,SUM(ap.Valor_Apostado) AS Valor_Apostado
FROM Apostadores a
LEFT JOIN Contas c ON a.ID = c.Apostador_ID
LEFT JOIN Depositos d ON a.ID = d.Apostador_ID
LEFT JOIN Saques s ON a.ID = s.Apostador_ID
LEFT JOIN Transferencias t ON a.ID = t.Origem_Apostador_ID
LEFT JOIN Apostas ap ON a.ID = ap.Apostador_ID
GROUP BY a.Nome, c.Saldo
推荐阅读
- node.js - .save() 不会保存模型中的所有内容
- numpy - 使用 numpy.insert 附加 numpy 数组
- ios - 制作椭圆形导航栏
- javascript - 页面加载时自动打开模式
- angular - 在表单组反应形式中插入值
- php - 使用 AJAX 时从页面获取数据消失
- c# - MVC 在两个日期之间从数据库下载数据
- scala - Scala Future 完成后进行清理的最佳实践
- java - 如何在 sparkjava 中以声明方式管理事务?
- java - 无法通过 spring-boot-starter-test 测试 Spring Boot REST API,而相同的“api”正在为 Postman 工作