Как объединить эти два sql-запроса в mysql?

Я хочу объединить ниже два запроса и отобразить два счетчика p_artist.id в зависимости от состояния названия каждой группы, но я не получаю никакой подсказки. Кто-нибудь может мне помочь?

Спасибо

Select p_band.title,count(p_artist.id) As 'Current Artists'
FROM p_artist INNER JOIN p_member ON p_artist.id = p_member.artist_id
INNER JOIN p_band ON p_band.id = p_member.band_id
WHERE p_member.leave_date IS NULL
GROUP BY p_band.title
;

Select p_band.title,count(p_artist.id) As 'Artists'
FROM p_artist INNER JOIN p_member ON p_artist.id = p_member.artist_id
INNER JOIN p_band ON p_band.id = p_member.band_id
WHERE p_member.leave_date IS NOT NULL 
GROUP BY p_band.title
;


I want to display the record like this:

title           Current Artists    Old Artists
classical band     23             19
display two p_artist.id count based on the condition of each band name Пожалуйста, поясните, что вы имеете в виду, показав пример данных И ожидаемых результатов.
SOS 04.04.2022 02:18

Быть NULL или не быть NULL, вот в чем вопрос.

wildplasser 04.04.2022 02:19

Если вы посмотрите на два запроса, они почти одинаковы, за исключением того, что предложение WHERE отличается. На основе предложения where я хочу отобразить результат «Текущие исполнители» и «Исполнители».

user3718511 04.04.2022 02:20

Используйте оператор case в своем выборе.

waterloomatt 04.04.2022 02:22

Может быть просто UNION двух запросов. Кстати, это не имеет абсолютно никакого отношения к php, я удалил этот тег

ADyson 04.04.2022 02:22

@waterloomatt не работает. Пожалуйста, помогите, я хочу отобразить результат, как этот столбец 1 столбец 2 столбец 3 classisal 2 4

user3718511 04.04.2022 02:32

@ADyson Union - это не решение. Я имею в виду, что хочу иметь два столбца идентификаторов счетчика

user3718511 04.04.2022 02:38
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
7
36
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Основываясь на ваших комментариях и изменениях, вы хотите отобразить title и количество Current Artists и Old Artists. Я только что изменил ваши два запроса, чтобы получить это;

  Select title, Current Artists, Old Artists from (
    Select p_band.title as title ,count(p_artist.id) As 'Current Artists'
    FROM p_artist INNER JOIN p_member ON p_artist.id = p_member.artist_id
    INNER JOIN p_band ON p_band.id = p_member.band_id
    WHERE p_member.leave_date IS NULL
    GROUP BY p_band.title ) a
    
    Join (
   Select p_band.title as ptitle,count(p_artist.id) As 'Old Artists'
   FROM p_artist INNER JOIN p_member ON p_artist.id = p_member.artist_id
   INNER JOIN p_band ON p_band.id = p_member.band_id
   WHERE p_member.leave_date IS NOT NULL 
   GROUP BY p_band.title ) b 
   On a.title = b.ptitle

Первый выбор запросит его, чтобы получить ваши title и Current Artists, затем Join второй выбор со счетом Old Artists.

Но не отображается колонка "Художники"

user3718511 04.04.2022 02:42

@ user3718511, пожалуйста, отредактируйте свой вопрос и опубликуйте структуру таблиц и ожидаемый результат, чтобы мы могли четко понять ваш вопрос.

fonz 04.04.2022 02:45

сделано. Вы можете проверить в нижней части моего вопроса

user3718511 04.04.2022 02:46
Ответ принят как подходящий

I mean I want to have two-column of count ids

Требования вообще не ясны, и я изначально набрал отдельный ответ, но в свете комментария выше я думаю, что вы ищете что-то вроде этого.

Он суммирует каждый оператор case в свой собственный столбец.

Select 
    p_band.title,
    SUM(CASE WHEN p_member.leave_date IS NULL THEN 1 ELSE 0 END) as null_count, 
    SUM(CASE WHEN p_member.leave_date IS NOT NULL THEN 1 ELSE 0 END) as not_null_count
FROM p_artist 
INNER JOIN p_member ON p_artist.id = p_member.artist_id
INNER JOIN p_band ON p_band.id = p_member.band_id
GROUP BY p_band.title
;

Я добавил вопрос. Извините за недопонимание. Пожалуйста, проверьте нижнюю часть моего вопроса.

user3718511 04.04.2022 02:53

Сделал небольшую правку. Что именно не работает? Что вы получаете, когда запускаете это?

waterloomatt 04.04.2022 02:53

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