2017-02-02 158 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,它返回一個空的結果。問候。 –