我有一个查询获取有关客户的一些数据。这个客户可以有三个电话号码,这些可以重复。MYSQL计数次数值在3列中的次数
要计算的次数,这些手机都是重复的合作伙伴已创建一个子查询:
(select count(*)
from TABLE_A as k
where (k.phone=a.phone or k.phone2=a.phone or k.phone3=a.phone)
and k.id!=a.id) as repetitionsPhone1
这里面一个更大的选择是这样的:
SELECT a.*,c.*,b.*,
(
select count(*)
from TABLE_A as k
where (k.phone=a.phone or k.phone2=a.phone or k.phone3=a.phone)
and k.id!=a.id
) as repetitionsPhone1
FROM a
left join c on a.id=c.id
left join b on a.id=b.id
此查询时间为50行约30秒,每天应该返回约2000行。
优化这个我用explain
,我看到那么我搜索,我想这该子查询是问题:
SELECT phn,sum(count) as phoneRepetitions
from (
select k.phone1 as phn, count(*) as count
from k
group by k.phone1
UNION
select k.phone2 as phn,count(*) as count
from k
group by k.phone2
UNION
select k.phone3 as phn,count(*) as count
from k
group by k.phone3
) as aux
group by phn
这将返回#1062 MYSQL error: Duplicate entry for key 'distinct key'
首先,我想解决的这个问题。任何人都知道发生了什么?这个错误在插入语句中似乎是逻辑的,但在选择?
然后,这将有助于改善我必须优化的大选择吗?我将不得不为三列进行此操作。
谢谢。
工会不会使它更有效率肯定 – Dimgold
@Dimgold感谢您的回答。你知道解决方案吗? – Maik
我不确定你可以使用相同的别名将表合并到自己表中吗? E.G你会为每个工会需要不同的别名吗?像 选择k.phone1如PHN,用k从ALTAS_DET K2 组从ALTAS_DET K1计数(*)作为计数 组由k.phone1 UNION 选择k.phone2作为PHN,COUNT(*)作为计数 .phone2 UNION 选择k.phone3为PHN,由k.phone3 –