gpt4 book ai didi

mysql - COUNT UNION 太多

转载 作者:行者123 更新时间:2023-11-29 19:43:49 29 4
gpt4 key购买 nike

所以...我有一个查询,该查询返回在我的网站上使用相同的电子邮件地址、密码和其他信息创建的用户帐户(是的,实现不好,不要问)。它通过从另一个程序获取用户 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

最佳答案

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

关于mysql - COUNT UNION 太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41183299/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com