Я пытаюсь отобразить как MIN, так и MAX, объединяя несколько таблиц для их информации. Я получаю MIN и MAX, но в других моих полях отображается неверная информация.
SELECT
SONG.SONG_NAME,
ALBUM.ALBUM_NAME,
ARTIST.ARTIST_NAME,
MAX(SONG.LENGTH_SECONDS) AS LENGTH
FROM SONG
JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID
UNION
SELECT
SONG.SONG_NAME,
ALBUM.ALBUM_NAME,
ARTIST.ARTIST_NAME,
MIN(SONG.LENGTH_SECONDS)
FROM SONG
JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID;
Вот результаты, которые я получаю с запросом:
| SONG_NAME | ALBUM_NAME | ARTIST_NAME | LENGTH |
+------------------------+---------------------------+----------------+--------+
| Fluorescent Adolescent | Favourite Worst Nightmare | Arctic Monkeys | 390 |
| Fluorescent Adolescent | Favourite Worst Nightmare | Arctic Monkeys | 177 |
Предлагаю вам прочитать сообщение, что @lc. упомянул. Тогда было бы полезно, если бы вы могли сказать, каков ожидаемый результат запроса, поскольку это может помочь кому-то дать вам ответ.






Вы можете удалить MAX и MIN из SELECT и вместо этого добавить TOP 1. Затем добавьте ORDER BY SONG.LENGTH_SECONDS, чтобы получить самую короткую песню, и ORDER BY SONG.LENGTH_SECONDS DESC, чтобы получить самую длинную песню.
SELECT TOP 1
SONG.SONG_NAME,
ALBUM.ALBUM_NAME,
ARTIST.ARTIST_NAME,
SONG.LENGTH_SECONDS AS LENGTH
FROM SONG
JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID
ORDER BY SONG.LENGTH_SECONDS DESC
UNION
SELECT TOP 1
SONG.SONG_NAME,
ALBUM.ALBUM_NAME,
ARTIST.ARTIST_NAME,
SONG.LENGTH_SECONDS AS LENGTH
FROM SONG
JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID;
ORDER BY SONG.LENGTH_SECONDS
OP использует MySQL, а не SQL. MySQL не поддерживает TOP
предполагая, что вы ищете минимальную и максимальную продолжительность песни для каждого исполнителя и альбома, и для этих песен получите имя_песни
Вы можете использовать объединение групп, сгруппированных по SONG.ALBUM_ID, ALBUM.ALBUM_NAME, ARTIST.ARTIST_NAME присоединился к песне для получения правильного названия песни
select song.song_name, t.ALBUM_NAME, t.ARTIST_NAME, t.LENGTH
from song
inner join (
SELECT
SONG.ALBUM_ID
ALBUM.ALBUM_NAME,
ARTIST.ARTIST_NAME,
MAX(SONG.LENGTH_SECONDS) AS LENGTH
FROM SONG
JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID
GROUP BY SONG.ALBUM_ID,ALBUM.ALBUM_NAME, ARTIST.ARTIST_NAME
) T on song.album_id = t.album_id and t.LENGTH = song.LENGTH_SECONDS
UNION
select song.song_name, t.ALBUM_NAME, t.ARTIST_NAME, t.LENGTH
from song
inner join (
SELECT
SONG.ALBUM_ID
ALBUM.ALBUM_NAME,
ARTIST.ARTIST_NAME,
MIN(SONG.LENGTH_SECONDS) AS LENGTH
FROM SONG
JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID
GROUP BY SONG.ALBUM_ID,ALBUM.ALBUM_NAME, ARTIST.ARTIST_NAME
) T on song.album_id = t.album_id and t.LENGTH = song.LENGTH_SECONDS
Возможный дубликат MySQL: что происходит с неагрегированными полями в GROUP BY?