#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 «;
Надеюсь, это поможет вам.Спасибо