Получить все из одной таблицы и ПОСЧИТАТЬ из другой

#mysql #sql #select

#mysql #sql #выберите

Вопрос:

K, итак, у меня есть две таблицы:

 categories
 ---- ---------- 
| id | slug     |
 ---- ---------- 
| 1  | billing  |
| 2  | security |
| 3  | people   |
| 4  | privacy  |
| 5  | messages |
 ---- ---------- 

categories_questions
 ------------------ ------------- 
| id | question_id | category_id |
 ------------------ ------------- 
| 1  |           1 |           2 |
| 2  |           2 |           5 |
| 3  |           3 |           2 |
| 4  |           4 |           4 |
| 5  |           4 |           2 |
| 6  |           5 |           4 |
 ------------------ ------------- 
  

Я хочу получить все из категорий и подсчитать количество вопросов (question_id) по каждой категории.

Скажем, в первой категории, выставление счетов, будет 1 вопрос, а во второй, безопасность, будет 3 вопроса.

Я пробовал это:

 SELECT categories.*, count(categories_questions.id) AS numberOfQuestions
FROM categories
INNER JOIN categories_questions
ON categories.id = categories_questions.category_id
  

Ответ №1:

Вы хотите сделать это:

 SELECT categories.id, max(categories.slug), count(categories_questions.id) AS numberOfQuestions
FROM categories
LEFT JOIN categories_questions
ON categories.id = categories_questions.category_id
group by categories.id
  

LEFT JOIN Гарантирует, что категории без вопросов будут перечислены с count = 0

Ответ №2:

Это должно сработать… вам просто нужно что-то агрегировать перед подсчетом:

 SELECT categories.*, COUNT(categories_questions.id) AS numberOfQuestions FROM categories
INNER JOIN categories_questions
ON categories.id = categories_questions.category_id
GROUP BY categories.id
  

Ответ №3:

Строка p_query = «выберите c.* , count(o.id ) из CustomerTable c , OrderTable o, где c.id=o.CustomerID ГРУППИРУЕТСЯ ПО c.id «;

Надеюсь, это поможет вам.Спасибо