2016-05-21 15 views
0

私はINNER JOINのクエリをMySQLで作成するクエリを作成しましたが、このクエリをTOTAL列で繰り返した後にSUMを繰り返す必要があります。 MySQLのクエリは次のとおりです。MySQLでCOUNTクエリを実行した後に繰り返し列の結果を単純化するには?

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 

このクエリでは、GROUP BYとだけTOTAL及びノンブルの値を持つ列でくれたユーザーの合計数を与えます。これをした後ので、(これは私のクエリは前にやったことの例である)のように、私は、クエリを簡素化したい:私はPHPとMySQLで働いている

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 

、あまりにもそれを作る方法がありますMySQLのクエリで直接?あなたが私を助けてくれることを願っていますありがとうございました。

+0

SELECTノンブル、SUM(合計)の合計(あなたクエリ)GROUP BY nombre – Strawberry

答えて

0

おそらく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 
+0

このコードはエラーを示しています。 HAVINGを使用していないのは、それを行う最善の方法ではないと聞いたからです。ありがとうございました。 –

+0

@ウルバンおそらくあなたの質問には、このような情報を述べるべきです。 –

0

あなたGROUP BY 2の値を作るためにあなたが重複ユーザーを取得:id_loginId_prospecto

あなたはこのように、あなたは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 

あなたのデータを見ることなく私は推測を行うだろう:あなたは、ユーザーあたりの合計をしたい場合は、ちょうどそうGROUP BYからprospectos.Id_prospectoを削除しますデータは、ユーザーレベルでグループ化されたままになります:

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 

が、これは動作しない場合は、することができます別のクエリで単にSUM合計:FROM

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 
+0

ありがとうございます。しかし、これは動作していません、エラー:すべての派生テーブルはMySQLで独自のエイリアスを持っている必要があります。 GROUP BY(usuarios_login.id_login)、prospectos.Id_prospectoは私にとって多くの理由から非常に重要であり、私はSUMの値を繰り返す必要があります。再度、感謝します。 –

関連する問題