简体   繁体   English

在MySQL中进行COUNT查询后,如何简化重复列的结果?

[英]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_loginId_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_prospectoGROUP 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM