ФорумПрограммированиеОбщие вопросы программирования → SQL выборка среднего значения по данным из 2-х таблиц

SQL выборка среднего значения по данным из 2-х таблиц

  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 15 декабря 2015 г. 14:26

    Всем привет, особенно тем, кто еще меня помнит )))
    Возник такой, казалось бы, элементарный вопрос про sql запрос. Но в мускуле не слишком силен, так что если кто поможет, был бы очень признателен.
    Задача в следующем: нужно извлечь среднее значение из одной таблицы, по данным из другой.
    Первая таблица (id, partner_id), Вторая таблица (partner_id, mark).
    Нужно извлечь всех партнеров из первой таблицы и добавить в вывод среднюю оценку данного партнера. Для конкретного партнера среднее значение беру так: SELECT ROUND(AVG(mark)) FROM tab2 WHERE partner_id = 'id_парнера'.
    А как эти 2 запроса склеить в один (и можно ли вообще) ума не приложу.

    from TRIAL with LOVE
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 декабря 2015 г. 14:29, спустя 2 минуты 56 секунд

    JOIN

    Сапожник без сапог
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 15 декабря 2015 г. 14:33, спустя 4 минуты 19 секунд

    да банально же что-то типа

    select t1.id, t1.partner_id, ROUND(AVG(t2.mark))
    from tab1 t1
    left join tab2 t2
      on t1.partner_id = t2.partner_id
    group by 2
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 15 декабря 2015 г. 15:54, спустя 1 час 20 минут 41 секунду

    По описанию задачи не вижу смысла затрагивать первую таблицу вообще. Поэтому

    SELECT partner_id, AVG(mark) AS mark FROM table2 GROUP BY partner_id

    Спустя 289 сек.

    Но, допустим, нужно получить результат
    id, partner_id, AVG(mark)
    т.е. может быть несколько разных id с одинаковым partner_id
    пусть нам нужны id = 1,3,5

    SELECT t1.id, t1.partner_id, t2.mark
    FROM t1
    LEFT JOIN (SELECT partner_id, AVG(mark) AS mark FROM table2 GROUP BY partner_id) AS t2 ON(t1.partner_id=t2.partner_id)
    WHERE t1.id IN (1,3,5)

    Спустя 192 сек.

    вот:

    
    SELECT t1.id, t1.partner_id, AVG(t2.mark)
    FROM t1
    LEFT JOIN t2 ON (t1.partner_id=t2.partner_id)
    GROUP BY t1.id, t1.partner_id
    
    не всё полезно, что в swap полезло
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 15 декабря 2015 г. 16:12, спустя 17 минут 41 секунду

    Ох, спасибо огромное. Кому элементарно а кто-то до сих пор ни черта не освоил нормальную выборку из пары таблиц ))

    from TRIAL with LOVE
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 декабря 2015 г. 16:21, спустя 9 минут 34 секунды

    Ох, спасибо огромное. Кому элементарно а кто-то до сих пор ни черта не освоил нормальную выборку из пары таблиц ))

    @TRIAL, так этож позор

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!