[英]How to simplify the result of repeated columns after making a COUNT query in MySQL?
I have a query that create an a Count with INNER JOIN's over a Query in MySQL, but I need to SUM the rows repeated after did this query in the TOTAL column. 我有一个查询,该查询通过MySQL中的查询在INNER JOIN的基础上创建一个计数,但是我需要对在TOTAL列中执行此查询后重复的行求和。 The MySQL query is: MySQL查询是:
SELECT COUNT(*) AS TOTAL,
usuarios.nombres_user AS NOMBRE
FROM usuarios
INNER JOIN usuarios_login ON usuarios.id_user = usuarios_login.id_user
INNER JOIN roles ON usuarios_login.id_rol_login = roles.id_rol
INNER JOIN actividades ON actividades.usuario_actividad = usuarios_login.id_login
INNER JOIN prospectos ON prospectos.Id_prospecto = actividades.id_prospecto_actividad
INNER JOIN familias_prospectos ON familias_prospectos.Id_familia_prospecto = prospectos.familia_prospecto_id
INNER JOIN campus ON campus.id_camp = familias_prospectos.id_campus_familias_prospectos
WHERE roles.nombre_rol LIKE '%CRM%'
AND campus.id_camp = 2
GROUP BY (usuarios_login.id_login), prospectos.Id_prospecto
ORDER BY usuarios.nombres_user ASC
This query give me the total count of a user in a column with a GROUP BY and only the TOTAL and NOMBRE values. 该查询为我提供了具有GROUP BY且只有TOTAL和NOMBRE值的列中的用户总数。 So, after a did this, I want to simplify the query, like (this is an example that my query did before): 因此,这样做之后,我想简化查询,就像(这是我的查询之前所做的一个示例):
My Query give me:
-----------------
TOTAL | NOMBRE
-----------------
2 John
1 John
4 John
6 Peter
3 Peter
1 Peter
4 Robert
2 Robert
And the Goal is try to get:
-----------------
TOTAL | NOMBRE
-----------------
7 John
10 Peter
6 Robert
I'm working in PHP and MySQL, there is a way too make it directly with a query in MySQL? 我在PHP和MySQL中工作,有没有办法直接在MySQL中使用查询呢? I've hope you help me. 我希望你能帮助我。 Thank you. 谢谢。
You probably should use HAVING
. 您可能应该使用HAVING
。
SELECT
COUNT(*) AS TOTAL,
usuarios.nombres_user AS NOMBRE
FROM usuarios
INNER JOIN usuarios_login ON usuarios.id_user = usuarios_login.id_user
INNER JOIN roles ON usuarios_login.id_rol_login = roles.id_rol
INNER JOIN actividades ON actividades.usuario_actividad = usuarios_login.id_login
INNER JOIN prospectos ON prospectos.Id_prospecto = actividades.id_prospecto_actividad
INNER JOIN familias_prospectos ON familias_prospectos.Id_familia_prospecto = prospectos.familia_prospecto_id
INNER JOIN campus ON campus.id_camp = familias_prospectos.id_campus_familias_prospectos
GROUP BY (usuarios_login.id_login), prospectos.Id_prospecto
HAVING roles.nombre_rol LIKE '%CRM%' AND campus.id_camp = 2
ORDER BY usuarios.nombres_user ASC
You get duplicates users because you make your GROUP BY
on 2 values: id_login
and Id_prospecto
您获得重复的用户,因为您将GROUP BY
设置为2个值: id_login
和Id_prospecto
You can better understand your result if you add the 2 fields you are grouping on in your SELECT
statement, like this 如果在SELECT
语句中添加要分组的2个字段,则可以更好地理解结果,如下所示
SELECT COUNT(*) AS TOTAL,
usuarios.nombres_user AS NOMBRE, usuarios_login.id_login, prospectos.Id_prospecto
FROM usuarios
INNER JOIN usuarios_login ON usuarios.id_user = usuarios_login.id_user
INNER JOIN roles ON usuarios_login.id_rol_login = roles.id_rol
INNER JOIN actividades ON actividades.usuario_actividad = usuarios_login.id_login
INNER JOIN prospectos ON prospectos.Id_prospecto = actividades.id_prospecto_actividad
INNER JOIN familias_prospectos ON familias_prospectos.Id_familia_prospecto = prospectos.familia_prospecto_id
INNER JOIN campus ON campus.id_camp = familias_prospectos.id_campus_familias_prospectos
WHERE roles.nombre_rol LIKE '%CRM%'
AND campus.id_camp = 2
GROUP BY (usuarios_login.id_login), prospectos.Id_prospecto
ORDER BY usuarios.nombres_user ASC
Without seeing your data I'll only make a guess: if you want the total per user, just remove prospectos.Id_prospecto
from the GROUP BY
so the data will stay grouped at user level : 没有看到你的数据,我只能做一个猜想:如果你希望每个用户的总,只是删除prospectos.Id_prospecto
从GROUP BY
这样的数据将在用户水平保持分组:
SELECT COUNT(*) AS TOTAL,
usuarios.nombres_user AS NOMBRE
FROM usuarios
INNER JOIN usuarios_login ON usuarios.id_user = usuarios_login.id_user
INNER JOIN roles ON usuarios_login.id_rol_login = roles.id_rol
INNER JOIN actividades ON actividades.usuario_actividad = usuarios_login.id_login
INNER JOIN prospectos ON prospectos.Id_prospecto = actividades.id_prospecto_actividad
INNER JOIN familias_prospectos ON familias_prospectos.Id_familia_prospecto = prospectos.familia_prospecto_id
INNER JOIN campus ON campus.id_camp = familias_prospectos.id_campus_familias_prospectos
WHERE roles.nombre_rol LIKE '%CRM%'
AND campus.id_camp = 2
GROUP BY (usuarios_login.id_login)
ORDER BY usuarios.nombres_user ASC
If this don't work, you can simply SUM
the totals with another query : 如果不工作,你可以简单地SUM
与另一个查询总计:
SELECT SUM(TOTAL), NOMBRE
FROM
(
SELECT COUNT(*) AS TOTAL,
usuarios.nombres_user AS NOMBRE
FROM usuarios
INNER JOIN usuarios_login ON usuarios.id_user = usuarios_login.id_user
INNER JOIN roles ON usuarios_login.id_rol_login = roles.id_rol
INNER JOIN actividades ON actividades.usuario_actividad = usuarios_login.id_login
INNER JOIN prospectos ON prospectos.Id_prospecto = actividades.id_prospecto_actividad
INNER JOIN familias_prospectos ON familias_prospectos.Id_familia_prospecto = prospectos.familia_prospecto_id
INNER JOIN campus ON campus.id_camp = familias_prospectos.id_campus_familias_prospectos
WHERE roles.nombre_rol LIKE '%CRM%'
AND campus.id_camp = 2
GROUP BY (usuarios_login.id_login), prospectos.Id_prospecto
) T
GROUP BY NOMBRE
ORDER BY NOMBRE ASC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.