Я хочу объединить ниже два запроса и отобразить два счетчика 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
Быть NULL или не быть NULL, вот в чем вопрос.
Если вы посмотрите на два запроса, они почти одинаковы, за исключением того, что предложение WHERE отличается. На основе предложения where я хочу отобразить результат «Текущие исполнители» и «Исполнители».
Используйте оператор case в своем выборе.
Может быть просто UNION двух запросов. Кстати, это не имеет абсолютно никакого отношения к php, я удалил этот тег
@waterloomatt не работает. Пожалуйста, помогите, я хочу отобразить результат, как этот столбец 1 столбец 2 столбец 3 classisal 2 4
@ADyson Union - это не решение. Я имею в виду, что хочу иметь два столбца идентификаторов счетчика
Основываясь на ваших комментариях и изменениях, вы хотите отобразить 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, пожалуйста, отредактируйте свой вопрос и опубликуйте структуру таблиц и ожидаемый результат, чтобы мы могли четко понять ваш вопрос.
сделано. Вы можете проверить в нижней части моего вопроса
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
;
Я добавил вопрос. Извините за недопонимание. Пожалуйста, проверьте нижнюю часть моего вопроса.
Сделал небольшую правку. Что именно не работает? Что вы получаете, когда запускаете это?
display two p_artist.id count based on the condition of each band name
Пожалуйста, поясните, что вы имеете в виду, показав пример данных И ожидаемых результатов.