Php 为什么在MySQL中使用SUM()时会得到重复的值?

Php 为什么在MySQL中使用SUM()时会得到重复的值?,php,mysql,sum,Php,Mysql,Sum,我有一个学校的数据库,我想列出属于特定课程的所有用户,并显示每个学生为该课程支付的总金额 这是我正在尝试排序的查询: SELECT usuarios.userID AS userid, cursos.nombreCurso, cursos.cursoPrecio, SUM(pagos.pagoMonto) AS total, cursosUsuarios.examenes, GROUP_CONCAT(DISTINCT rolesUsuarios.nombreRo

我有一个学校的数据库,我想列出属于特定课程的所有用户,并显示每个学生为该课程支付的总金额

这是我正在尝试排序的查询:

SELECT    
  usuarios.userID AS userid, 
  cursos.nombreCurso, cursos.cursoPrecio, 
  SUM(pagos.pagoMonto) AS total,
  cursosUsuarios.examenes, 
  GROUP_CONCAT(DISTINCT rolesUsuarios.nombreRol SEPARATOR ',') AS 'roless',
  GROUP_CONCAT(DISTINCT pagos.pagoMonto SEPARATOR ',') AS 'pagoss'

FROM usuarios LEFT JOIN pagos
ON usuarios.userID = pagos.userID

LEFT JOIN rolesUsuarios
ON pagos.userID = rolesUsuarios.userID

LEFT JOIN cursos
ON pagos.cursoID = cursos.cursoID

LEFT JOIN cursosUsuarios
ON usuarios.userID = cursosUsuarios.userID
AND pagos.cursoID = cursosUsuarios.cursoID

WHERE pagos.estadoPago = 1
AND cursos.cursoID = 84
GROUP BY usuarios.userID
这些是我的桌子:

惯用者

CREATE TABLE usuarios(
    userID int unsigned not null auto_increment primary key,
    userEmail char(50) null,
    userApellido char(50) null,
    userNombres char(20) null
    UNIQUE(userEmail)
)
库索斯球场

CREATE TABLE cursos (
    cursoID int unsigned not null auto_increment primary key,
    cursoID_old int(6) null
    nombreCurso char(100) not null,
    cursoPrecio int(10) null
)
苏亚里奥斯草

CREATE TABLE cursosUsuarios (
    cursosUsuariosID int unsigned not null auto_increment primary key,
    userID int not null,
    cursoID int not null,
    examenes int not null
)
pagos课程费用

CREATE TABLE pagos (
    pagoID int unsigned not null auto_increment primary key,
    userID int not null,
    cursoID int null,
    pagoMonto int null,
    estadoPago int null
)
角色usuarios用户角色

CREATE TABLE rolesUsuarios (
    rolesUsuariosID int unsigned not null auto_increment primary key,
    userID int not null,
    nombreRol char(50) not null
)
这是我得到的输出:

 userID -- nombreCurso -- cursoPrecio -- total -- examenes -- roless -- pagoss 

 1 ------- Curso Demo --- 600 ---------- 300 ------ NULL ---- 1,2 ----- 100,50 

 2 ------- Curso Demo --- 600 ---------- 1000 ------ NULL --- 2,3 ----- 500
如您所见,字段SUMpagos.pagoMonto中显示为总计的值乘以2。最后一列显示了各个付款


因此,用户1的总数应该是150,用户2的总数应该是500。

我认为您的总数中遗漏了一个明显的数字,可以尝试使用 帕戈斯岛
我希望这会有所帮助。

在sql的这一点上,所有结果行将获得与总数据相同的SUMpagos.pagoMonto,您必须通过usuarios.userID、pagos.userIDSry重新生成sql逻辑不确定,但测试组,忘记我的所有注释,没有正确获取。您确定pagos条目没有重复吗?我的意思是可能有两行相同的用户ID和相同的付款?我们可以从pagos中看到SELECT*的结果吗,其中userID=1;请?谢谢你的评论@JazZ。以防万一,我检查了付款,输出是预期的两行,其中只有100+50笔付款。