2015-08-03 3 views
0

У меня возникла проблема с моим запросом, имеющим как , так и GROUP_CONCAT.Проблема с Mysql SUM и GROUP_CONCAT в запросе

Значения стоимости меняются, так как значения GROUP_CONCAT возрастают.

Ниже мой код:

SELECT  ul.display_name, 
      ul.photo, 
      ul.user_id, 
      Sum(ulr.level_score)    AS level_scores, 
      Sum(ulr.level_timer)    AS level_timer, 
      Group_concat(ulr.level_completed) AS levels, 
      Group_concat(DISTINCT c.bit_id) AS bit_id 
FROM  user_level_responses    AS ulr 
INNER JOIN user_login      AS ul 
ON   ( 
         ul.user_id=ulr.user_id) 
INNER JOIN c_member AS cm 
ON   ( 
         cm.user_id=ul.user_id 
      AND  cm.user_approval='Y' 
      AND  cm.delete_status='0' 
      AND  cm.status='1') 
INNER JOIN ctree ct 
ON   ( 
         cm.circuit_id=ct.circuit_id) 
INNER JOIN cir AS c 
ON   ( 
         c.circuits_id=cm.circuit_id 
      AND  c.builtin=0 
      AND  c.delete_status='0' 
      AND  c.status='1') 
WHERE  Match(ct.circuit_path) against ('_902_') 
AND  ulr.institution_id=321 
AND  ulr.delete_status=0 
AND  ulr.status=1 
AND  ul.delete_status=0 
GROUP BY ulr.user_id 
ORDER BY level_scores DESC, 
      level_timer ASC, 
      ul.display_name limit 500 

Если фактическая оценка составляет 900, а если у меня есть 2 идентификаторов в GROUP_CONCAT тогда фактический счете вдвое оригинал.

Expected OUTPUT: 

user1 2010.cs,btech 960 00:01:08 Completed 
user2 btech 920 00:01:08 Completed 

OUTPUT GETTING: 

user1 2010.cs,btech 1920 00:01:08 Completed 
user2 btech 920 00:01:08 Completed 

дважды фактическая сумма т.е. 960.

+0

У вас возникли проблемы с 'SUM' или' GROUP_CONCAT'? Можете ли вы представить здесь ожидаемые данные проб и фактические данные образца? –

+0

Если user_login, c_member, c_tree или cir имеют две возможные строки, которые могут присоединиться в любой момент, это удвоит ваши результаты. Я предполагаю, что user_login не является результатом, потому что user_id должен быть уникальным, но поскольку мы не знаем природу какого-либо остального, трудно определить, что это может быть. – trex005

+0

@ trex005 пользователь может иметь несколько идентификаторов, которые являются group_concated с использованием запроса ... да u правы, поскольку первая строка имеет 2 идентификатора, поэтому оценка удваивается .... в любом случае обходить это ... так как пользователь может быть частью многие группы и его id - c.bit_id – Wolverine

ответ

0

Ваша проблема заключается в том, что ваши многочисленные идентификаторы удвоение строк, что ваш результат имеет перед группировкой. Вы можете решить эту проблему, объединив все внешние данные в подзапросе.

У меня нет абсолютно никакой идеи структуры вашей базы данных или всех функций, но это удар в темноте при реорганизации вашего запроса. Если вам нужно, я могу написать гораздо более простой SQLFiddle, чтобы показать вам, что я имею в виду.

SELECT  ul2.display_name, 
      ul2.photo, 
      ul2.user_id, 
      Sum(ulr.level_score)    AS level_scores, 
      Sum(ulr.level_timer)    AS level_timer, 
      Group_concat(ulr.level_completed) AS levels, 
      ul2.bit_id 
FROM  user_level_responses    AS ulr 
INNER JOIN (
    SELECT 
    ul.display_name, 
    ul.photo, 
    ul.user_id, 
    GROUP_CONTACT(DISTINCT c.bit_id) as bit_id 
    FROM  user_login      AS ul 
    INNER JOIN c_member AS cm 
    ON   ( 
        cm.user_id=ul.user_id 
      AND  cm.user_approval='Y' 
      AND  cm.delete_status='0' 
      AND  cm.status='1') 
    INNER JOIN ctree ct 
    ON   ( 
        cm.circuit_id=ct.circuit_id) 
    INNER JOIN cir AS c 
    ON   ( 
        c.circuits_id=cm.circuit_id 
      AND  c.builtin=0 
      AND  c.delete_status='0' 
      AND  c.status='1') 
    WHERE  Match(ct.circuit_path) against ('_902_') 
    AND  ul.delete_status=0 
    GROUP BY ul.user_id 
) AS ul2 
ON (
     ulr.user_id = ul2.user_id) 
WHERE  ulr.institution_id=321 
AND  ulr.delete_status=0 
AND  ulr.status=1 
GROUP BY ulr.user_id 
ORDER BY level_scores DESC, 
      level_timer ASC, 
      ul.display_name limit 500 
+0

Прежде всего спасибо trex005 за то, что помогли мне ... но когда я объясню этот запрос, он оказывает огромное влияние на производительность, поскольку я делаю левый присоединяйтесь к запросу ...... следовательно, я изменил логику и добавил подзапрос после того, как условие ..... – Wolverine

Смежные вопросы