MySQL создает таблицу с 2 разными выборками

#mysql

#mysql

Вопрос:

 SELECT COUNT(*) as not_returned_devices, contact_email FROM device_rent WHERE rent_end IS NULL GROUP BY contact_email;

SELECT COUNT(*) as returned_devices, contact_email FROM device_rent WHERE rent_end IS NOT NULL GROUP BY contact_email;
  

Что мне нужно, так это создать таблицу с 3 столбцами: имя_контакта, количество возвращенных устройств и количество не возвращенных устройств. По сути, мне нужно объединить эти две выборки в одну таблицу, но я застрял.

Ответ №1:

Просто используйте условную агрегацию:

 SELECT contact_email, SUM(rent_end IS NULL) as not_returned_devices,
       SUM(rent_end IS NOT NULL) as returned_devices
FROM device_rent
GROUP BY contact_email;
  

Обратите внимание, что при этом используется сокращение MySQL, где логические выражения обрабатываются как «1» для true и «0» для false. Это удобно и избавит вас от написания case инструкции. Это будет выглядеть так:

 SELECT contact_email,
       SUM(CASE WHEN rent_end IS NULL THEN 1 ELSE 0
           END) as not_returned_devices,
       COUNT(rent_end) as returned_devices
FROM device_rent
GROUP BY contact_email;