COUNT UNION太多

时间:2016-12-16 11:21:21

标签: mysql sql count duplicates union

所以...我有一个查询,返回在我的网站上使用相同的电子邮件地址,密码和其他信息制作的用户帐户(是的,执行不好,不要问)。它是通过从另一个程序中提供用户ID来实现的。

我的SQL是

SELECT *
FROM
  (SELECT usuario.id as 'user_id',
          concat(usuario.nombre, ' ', usuario.apellidos) AS 'user_full_name',
          usuario.email 'user_email',
                        LEFT(usuario.date_created, 19) AS 'user_date_created',
                        LEFT(usuario.last_updated, 19) AS 'user_last_updated',
                        CASE
                            WHEN usuario.status = 10 THEN 'Banned'
                            ELSE 'Active'
                        END AS 'status',
                        'Mismos datos' AS duplicate_type,
                        CASE
                            WHEN usuario.es_broker=0 THEN 'Consumer'
                            WHEN usuario.es_tm=1 THEN 'TM'
                            ELSE 'Broker'
                        END AS 'user_type',
                        COUNT(DISTINCT penalizacion.id) AS 'penalty_count'
   FROM usuario
   JOIN penalizacion ON usuario.id = penalizacion.vendedor_id
   WHERE usuario.password =
       (SELECT usuario.password
        FROM usuario
        WHERE usuario.id = {USUARIO_DUPE})
   UNION SELECT usuario.id as 'user_id',
                concat(usuario.nombre, ' ', usuario.apellidos),
                usuario.email,
                LEFT(usuario.date_created, 19),
                LEFT(usuario.last_updated, 19),
                CASE
                    WHEN usuario.status = 10 THEN 'Dado de baja'
                    ELSE 'Activo'
                END AS 'status',
                'Mismo móvil' AS duplicate_type,
                CASE
                    WHEN usuario.es_broker=0 THEN 'Consumer'
                    WHEN usuario.es_tm=1 THEN 'TM'
                    ELSE 'Broker'
                END AS 'user_type',
                COUNT(DISTINCT penalizacion.id) AS 'penalty_count'
   FROM usuario
   JOIN penalizacion ON usuario.id = penalizacion.vendedor_id
   WHERE usuario.numero_movil =
       (SELECT usuario.numero_movil
        FROM usuario
        WHERE usuario.id = {USUARIO_DUPE})
   UNION SELECT usuario.id as 'user_id',
                concat(usuario.nombre, ' ', usuario.apellidos),
                usuario.email,
                LEFT(usuario.date_created, 19),
                LEFT(usuario.last_updated, 19),
                CASE
                    WHEN usuario.status = 10 THEN 'Dado de baja'
                    ELSE 'Activo'
                END AS 'status',
                'Mismo email' AS duplicate_type,
                CASE
                    WHEN usuario.es_broker=0 THEN 'Consumer'
                    WHEN usuario.es_tm=1 THEN 'TM'
                    ELSE 'Broker'
                END AS 'user_type',
                COUNT(DISTINCT penalizacion.id) AS 'penalty_count'
   FROM usuario
   JOIN penalizacion ON usuario.id = penalizacion.vendedor_id
   WHERE usuario.email =
       (SELECT usuario.email
        FROM usuario
        WHERE usuario.id = {USUARIO_DUPE})
   UNION SELECT usuario.id,
                concat(usuario.nombre, ' ', usuario.apellidos),
                usuario.email,
                LEFT(usuario.date_created, 19),
                LEFT(usuario.last_updated, 19),
                CASE
                    WHEN usuario.status = 10 THEN 'Dado de baja'
                    ELSE 'Activo'
                END AS 'status',
                'Misma tarjeta principal' AS duplicate_type,
                CASE
                    WHEN usuario.es_broker=0 THEN 'Consumer'
                    WHEN usuario.es_tm=1 THEN 'TM'
                    ELSE 'Broker'
                END AS 'user_type',
                COUNT(DISTINCT penalizacion.id) AS 'penalty_count'
   FROM usuario
   JOIN penalizacion ON usuario.id = penalizacion.vendedor_id
   WHERE usuario.main_credit_card_id =
       (SELECT usuario.main_credit_card_id
        FROM usuario
        WHERE usuario.id = {USUARIO_DUPE})
   ORDER BY status DESC) A
GROUP BY user_id

您会注意到我有一个专栏,试图计算这些重复用户帐户中每个帐户的罚分数。然而,而不是那样," penalty_count"专栏似乎总结了我正在寻找重复项的用户的ID的惩罚数量以及实际重复数量的罚分数。

所以没有得到

COUNT counts too much when UNIONing

我明白了

wished result of COUNT is ok

1 个答案:

答案 0 :(得分:0)

感谢所有评论。我不知道我在想什么。我会尝试找出问题,然后再问一个更简洁的问题!谢谢!

相关问题