Проблема с INNER JOIN с COUNT и GROUP BY

SELECT f.Line,
       q.line,
       COUNT(f.Line) AS FTR_count,
       COUNT(q.line) AS quantity_count
FROM [work_permit].[dbo].[FTR] f
     INNER JOIN [work_permit].[dbo].[quantity] q ON f.Line = q.line
GROUP BY f.Line,
         q.line;

Я хочу FTR_count вернуть количество строк, присутствующих в таблице FTR. Точно так же я хочу, чтобы quantity_count вернул количество строк, присутствующих в таблице Quantity. Он этого не делает.

Пожалуйста, помогите мне исправить этот запрос.

Когда я запускаю его, я получаю неверные значения для FTR_count и quantity_count.

Мне задали примерные данные и желаемые результаты. Поэтому я привожу здесь примерные данные.

Похоже, вам нужна предварительная агрегация.

Thom A 30.07.2024 12:53
count(distinct ...?? Показать некоторые примеры данных и желаемые результаты
Dale K 30.07.2024 12:56

@DaleK Different дает значение 1. Столбец строки присутствует как в таблицах FTR, так и в количестве. Я хочу, чтобы общее количество строк присутствовало в таблицах FTR и Quantity отдельно. Чтобы рассчитать построчно, я добавил предложение group by. Это не помогает.

Ram 30.07.2024 13:03

Нам нужны образцы данных и желаемые результаты.

Dale K 30.07.2024 13:12

@DaleK Я добавил примеры данных. Пожалуйста, проверьте.

Ram 30.07.2024 13:51
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно предварительно агрегировать. Здесь у вас есть отношение один ко многим или, исходя из того, что оба столбца «неправильные», отношение многие ко многим.

Таким образом, вам необходимо убедиться, что вы предварительно агрегируете одну сторону, чтобы вы добавляли только одну строку и, следовательно, не «раздували» число.

Одним из способов добиться этого является производная таблица:

SELECT f.Line,
       --q.line, --Both lines are the same, so why repeat it?
       COUNT(f.Line) AS FTR_count,
       MAX(q.quantity_count) AS quantity_count --using MAX so we don't need to pop it in the GROUP BY
FROM [dbo].[FTR] f
     INNER JOIN(SELECT q.Line,
                       COUNT(q.Line) AS quantity_count
                FROM [dbo].[quantity] q 
                GROUP BY q.Line) q ON f.Line = q.line
GROUP BY f.Line;
         --q.line;

Другие вопросы по теме