Как получить значения для разных строк и нескольких столбцов в sql

Я хочу получить данные из трех разных таблиц

Таблица 1: iep_start_lp_request

lp_id Certificates_check EmpName EmpOldID Дата создания 6516 да Хемалата 113111 2022-01-20 08:55:27 6332 да А. В. Шрути 110816 2022-01-20 08:55:27 6503 нет А. Дивья 117909 2022-02-20 08:55:27 11989 да Абха Верма 110415 2022-02-20 08:55:27 6401 нет Аадарш Кирти 115899 2022-03-20 08:55:27 8864 да Ааканкша Рехан 2150618 2022-03-20 08:55:27 8786 да Аакарш Бхатия 110081 2022-05-20 08:55:27

Таблица 2: iep_employee_list

EmpName EmpOldID Хемалата 108782 Хемалата 113111 Хемалата 110421 А. Р. Шашикумар 118531 А. С. Кундана Саи 115788 Сатиш 112663 Суреш 117851 Умия Бегум 112956 А. В. Раманатан 116010 А. В. Шрути 110816 А. Дивья 117909

Таблица 3: iep_postmeta

post_id мета_ключ мета_значение 8865 выберите категорию a:1:{i:0;s:18:"Сертификаты AWS";} 8603 выберите категорию a:1:{i:0;s:21:"Сертификаты Google";} 6656 выберите категорию a:1:{i:0;s:24:"Сертификаты Microsoft";}

Мне нужно подсчитать количество сотрудников, прошедших сертификацию по разным категориям в каждом месяце.

Ниже приведен запрос, который я пробовал

select SUBSTRING_INDEX(SUBSTRING_INDEX( certicatname.`meta_value`,':"',-1) ,'";}',1)
    as 'certicatname',
       max(case when (lp2.`created_date` BETWEEN '2022-04-01' AND '2022-01-01') then COUNT(lp2.`user_emp_id`) end) as Jan,
       max(case when (lp2.`created_date` BETWEEN '2022-08-01' AND '2022-04-01') then COUNT(lp2.`user_emp_id`) end) as Feb,
       max(case when (lp2.`created_date` BETWEEN '2022-12-01' AND '2022-08-01') then COUNT(lp2.`user_emp_id`) end) as mar
    
    from
    `iep_start_lp_request` as lp2 LEFT JOIN `iep_employee_list` as emplyoee2 ON lp2.`user_emp_id`=emplyoee2.`EmpOldID` LEFT JOIN `iep_postmeta` as certicatname ON certicatname.`post_id`=lp2.`lp_id` WHERE (certicatname.`meta_value` REGEXP '.*;s:[0-9]+:"AWS Certifications".*' OR certicatname.`meta_value` REGEXP '.*;s:[0-9]+:"Microsoft Certifications".*' OR certicatname.`meta_value` REGEXP '.*;s:[0-9]+:"Google Certifications".*' ) AND lp2.`certifications_check`='yes' GROUP BY certicatname.`meta_value` ORDER BY certicatname.`meta_value`;

Можете ли вы поделиться своими данными в виде текста, а не фотографий, это поможет нам помочь вам

SelVazi 14.01.2023 21:09

Как форматировать рассматриваемые таблицы meta.stackoverflow.com/questions/302471/… и онлайн-инструмент tablesgenerator.com/markdown_tables

June7 14.01.2023 23:06

привет @SelVazi Я обновил вопрос, чтобы таблицы были в виде текста, не могли бы вы помочь сейчас, спасибо

Shahala Anjum 15.01.2023 03:22

4.01, 5.50, 7.39 не считаются сертификатами. В математике счетчики имеют целочисленные значения. Обновите ожидаемый результат, чтобы он отражал ваше описание (или наоборот), и используйте таблицы в текстовом формате вместо изображений.

lemon 15.01.2023 12:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Можете ли вы попробовать это:

select
  SUBSTRING_INDEX(SUBSTRING_INDEX( ip.meta_value,':"',-1) ,'";}',1) as certificate,
  coalesce(count(case when month(isr.created_date) = 1 then 1 end), 0) as JAN,
  coalesce(count(case when month(isr.created_date) = 2 then 1 end), 0) as FEB,
  coalesce(count(case when month(isr.created_date) = 3 then 1 end), 0) as MARS
from iep_start_lp_request isr
inner join iep_employee_list iel on iel.EmpOldID = isr.EmpOldID
inner join iep_postmeta ip on ip.iep_postmeta = isr.lp_id
where isr.certifications_check = 'yes'
group by ip.meta_value, month(isr.created_date);

Я использовал почти ту же логику, что и ваша: SUBSTRING_INDEX чтобы получить имя сертификата, case when для создания столбцов из строк. и если нам нужны данные на основе сертификата и месяца, нам нужно сгруппировать по обоим, а не только по сертификатам.

Попробовать можно отсюда https://dbfiddle.uk/l-PV7_zj

эй @SelVazi, спасибо :) это сработало для меня с некоторыми небольшими изменениями, основанными на именах моих таблиц :)

Shahala Anjum 16.01.2023 11:36

Рад слышать это .. наслаждайтесь кодированием :)

SelVazi 16.01.2023 12:28

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