У меня есть следующие данные в таблице MySQL Tourament.
Я пытаюсь создать запрос для вывода данных в следующей форме для их дальнейшей обработки.
Пожалуйста, посмотрите здесь для получения данных.
Текущая попытка:
select COALESCE(NULLIF(`team`,''), `name`) as name,
case
when `team` = '' THEN false
when `team` != '' THEN true
end as `group`
from `tournament` order by COALESCE(NULLIF(`team`, ''), `name`) ASC;
@JNeville Пожалуйста, посмотрите sqlfiddle для получения данных
Я добавил вашу текущую попытку к вопросу, чтобы обеспечить контекст. Объяснение все равно было бы полезно.
Ваша попытка хороша, вам просто нужно переписать COALESCE(NULLIF(team,''), name)
на COALESCE(team, name)
, потому что COALESCE
перейдет к следующему параметру только в том случае, если текущий параметр равен NULL
. Поскольку'' != NULL
столбец name
никогда не будет выбран.
Что-то вроде:
SELECT COALESCE(team, name) as name,
CASE when team IS NULL THEN 0 ELSE 1 END as group
FROM tournament
ORDER BY COALESCE(team, name);
Спасибо @JNeville за это разъяснение, однако оно не дает желаемого результата.
Вероятно, вам просто нужен DISTINCT или GROUP BY для агрегирования записей, и вы должны быть примерно готовы.
Можете ли вы привести пример?
Просто вставь слово DISTINCT
после слова SELECT
и давай копать
Ваш подход хорош! Попробуйте приведенный ниже код, чтобы добиться ожидаемого результата:
SELECT
team AS name,
case
when `team` = '' THEN false
when `team` != '' THEN true
end as `group`
FROM tournament
WHERE team IS NOT NULL AND team != ''
GROUP BY team
UNION ALL
SELECT name, 0 AS team
FROM tournament
WHERE team IS NULL OR team = ''
ORDER BY name;
Спасибо @Kousalya N за ответ! Решение действительно дает желаемый результат.
Это работает и без такого объединения
SELECT
MAX(name) AS name,
IF(team = '',0,1) as team
FROM tournament
GROUP BY team,name
ORDER BY IF(team = '',1,0),name ASC;
результат:
name team
Andrew 1
Carol 1
Max 1
Neil 1
Warren 1
William 1
Donna 0
Keith 0
Phil 0
William 0
нажмите здесь, чтобы увидеть образец
Я не понимаю, как вы получаете от своей таблицы
tournament
желаемый результат. Вы можете объяснить?