2017-02-02 101 views
1

下午好,MySQL查询与GROUP BY和JOIN

我想从我的MySQL数据库获得一些信息,我有问题,因为我不能够有所需的信息。我尝试了很多不同的方法,但他们都没有工作。我希望你能找到的东西,因为我非常接近找到解决办法,但缺少的东西:

MySQL查询:

SELECT b.id, b.tipo_perfil, round(avg(b.edad)), COUNT(c.zona), c.zona 
FROM analizador_datos_usuario AS a 
INNER JOIN analizador_datos_perfil AS b ON (a.id_usuario = b.id_perfil) 
INNER JOIN analizador_datos_perfil_historial AS c ON (b.id = c.id_perfil) 
WHERE a.id_usuario=21 
GROUP BY b.tipo_perfil, c.zona 
ORDER BY b.tipo_perfil ASC, count(c.zona) DESC 

该查询给我下面的信息:

表(红色是我需要的):

enter image description here

亲切的问候,

+0

删除'b.id,c.zona'因为你并不需要对这些列的'组by' - :

试试这个修改后的查询。 –

+1

该群组无效。不会在较新的MySQL版本上执行(除非在兼容模式下),将使用旧版本返回不可预知的结果... – jarlh

+1

一般的GROUP BY规则说:“如果指定了GROUP BY子句,SELECT列表中的每个列引用必须标识一个分组列或者是一个集合函数的参数。“ – jarlh

回答

1

尝试:

SELECT b.tipo_perfil, round(avg(b.edad)), COUNT(distinct c.zona), group_concat(distinct b.id separator ' ') as id_list, group_concat(distinct c.zona separator ' ') as zona_list 
FROM analizador_datos_usuario AS a 
INNER JOIN analizador_datos_perfil AS b ON (a.id_usuario = b.id_perfil) 
INNER JOIN analizador_datos_perfil_historial AS c ON (b.id = c.id_perfil) 
WHERE a.id_usuario=21 
GROUP BY b.tipo_perfil 
ORDER BY b.tipo_perfil ASC, count(distinct c.zona) DESC 
+0

嗨@Lauren PELE,这个查询它非常接近,但我有所有的“zonas”我有最新的单元格。我认为他们是在正确的顺序,但我只需要第一个结果。问候。 –

+0

尝试,但它不会总是返回最多行的区域 SELECT b.tipo_perfil,round(avg(b.edad)),COUNT(distinct c.zona), group_concat(distinct b.id separator' ')as id_list,SUBSTRING_INDEX(SUBSTRING_INDEX(group_concat(distinct c.zona separator'#'),'#',1),'#',-1)作为first_zona FROM analizador_datos_usuario AS a INNER JOIN analizador_datos_perfil AS b ON a.id_usuario = b.id_perfil) INNER JOIN analizador_datos_perfil_historial为C ON(b.id = c.id_perfil) WHERE a.id_usuario = 21 GROUP BY b.tipo_perfil ORDER BY b.tipo_perfil ASC,计数(不同℃。 zona)DESC –

+0

请参阅使用子查询来对每个递减计数http:// stackoverflow进行排序group_concat。 com/questions/7101008/mysql-group-concat-with-by-order-by-count –

0

我觉得你得到的结果显示什么,你想要得到它是红色。从`select`

SELECT b.id, b.tipo_perfil, round(avg(b.edad)), COUNT(c.zona) counted_zone, c.zona 
FROM analizador_datos_usuario AS a 
INNER JOIN analizador_datos_perfil AS b ON (a.id_usuario = b.id_perfil) 
INNER JOIN analizador_datos_perfil_historial AS c ON (b.id = c.id_perfil) 
WHERE a.id_usuario=21 
GROUP BY b.tipo_perfil, c.zona 
Having MAX(counted_zone) 
ORDER BY b.tipo_perfil ASC, counted_zone DESC 
+0

Hi @Rakesh Kumar,它说:“无效的组功能使用”。为什么它显示错误?一切似乎都对。问候。 –

+0

@JordiGámez编辑答案现在尝试 –

+0

嗨@RakeshKumar,它返回一个空的结果。问候。 –