SQL Данные подсчета с одинаковой детализацией - PullRequest
0 голосов
/ 04 августа 2020

У меня есть заголовок таблицы как

Id_header                  | Invoice_number
------------------------------------------------------- 
KG001TEI5                  | 00000001 
RU024GHE4                  | 00000002 
MK842LGS9                  | 00000003
STH4SFG92                  | 00000004

и детализация таблицы как

Id_detail        | Id_header     | Item
------------------------------------------------------- 
KSJ234SDG        | 00000001      | Item01 
URGK4K5K4        | 00000001      | Item02 
KJ53JL5KK        | 00000002      | Item01
QSGKJRU9G        | 00000002      | Item03
MNB4598SG        | 00000003      | Item01
IMB49KS4G        | 00000003      | Item02
GK2GO9KG4        | 00000004      | Item01
BS489G45G        | 00000004      | Item02
OWG84LG43        | 00000004      | Item03

Я хочу вычислить, сколько данных имеет один и тот же элемент детали. например, результат того, что я хочу, должен быть:


Invoice_number             | total
--------------------------------------------------------
00000001                   |    2
00000002                   |    1
00000004                   |    1

Я должен попытаться выбрать данные с помощью этого запроса

select count(1), d.Id_header
from detail d 
where d.Item in ('Item01', 'Item02')
group by d.Id_header
having count(*) = 2;

это скрипт db: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=7b990238c3aaae3d1d39280e59ca0b0e

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

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Если я правильно понял, вам нужны заголовки с точно такими же элементами. Если да, вы можете делать все, что хотите, с двумя уровнями агрегирования:

select items, group_concat(id_header) as headers, count(*) as num_headers
from (select d.id_header, group_concat(d.item order by d.item) as items
      from details d
      group by d.id_header
     ) d
group by items;
0 голосов
/ 04 августа 2020

Согласно данным, размещенным в dbfiddle ...

Если вы хотите объединить данные из header и detail таблицы, получите count(d.Id_header), попробуйте следующее:

select h.Invoice_number, count(d.Id_header) AS total
  from header h INNER JOIN detail  d ON h.Id_header = d.Id_header
  group by h.Invoice_number;

результат:

Invoice_number  total
00000001    2
00000002    2
00000003    2
00000004    3

dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...