Получить список данных из одной таблицы и некоторое количество записей из другой, возможно ли сделать в одном запросе?

0

У меня две таблицы - countries, tours.

countries имеет поля (id), (name), (order)

tours имеет поля (id), (id_country)...


Мне нужно получить весь список id и name из таблицы countries, упорядоченный по их порядку, и количество записей в таблице tours, где tours. id_country= countries. id countries.

Т.е. мне нужно получить такой список

id   name      count_of_tours
1    France    15
2    England   22
.............................

Можно ли сделать в одном запросе?

Спасибо большое

Теги:
phpmyadmin

3 ответа

2
Лучший ответ
SELECT C.id,
       C.name,
       COUNT(T.id) as count_of_tours
  FROM countries C
  LEFT JOIN tours T
         ON T.id_country = C.id
 GROUP BY C.id,
          C.name
 ORDER BY C.order
  • 2
    @Symon - при использовании «агрегатных функций», таких как COUNT (), SUM, MAX () и т. Д., Необходимо указывать столбцы, которые указывают на разрыв / сброс в расчете COUNT, поэтому SQL знает, что нужно считать все T.id записи и отображение, которые сравниваются с первыми значениями C.id и C.name, затем сбрасывают его внутренний счетчик на 0 и возобновляют подсчет при изменении C.id/C.name. Предложение GROUP BY используется для определения точки изменения, в которой необходимо прекратить считать один набор записей для одной страны, сохранить этот результат, сбросить счетчик и начать подсчет следующего набора записей для следующей страны.
  • 0
    Большое спасибо за подробное объяснение. Это намного лучше, чем во многих уроках :) Но почему нужно группировать их по обеим колонам? работает с одним тоже.
Показать ещё 1 комментарий
2
SELECT countries.id, countries.name, COUNT(id_country) AS Count
FROM countries
LEFT JOIN tours
on tours.id_country = countries.id
GROUP BY id_country
ORDER BY countries.order
  • 0
    GROUP BY должен перечислить оба неагрегированных столбца, но в противном случае вы опередите меня
  • 0
    Я не знал этого о GROUP BY, приятно знать! Работая только с MySQL (которые принимают это), я должен был думать, что другие базы данных не примут это. Спасибо !
0

Это реальное возможное все, что вам нужно узнать, это использование объединений. Когда вы используете соединение, вы можете присоединиться к результату из двух таблиц и дать результат как один.

SELECT id, name, COUNT (id_country) FROM countries LEFT JOIN tours on tours.id_country = countries.id order by countries.id;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню