2015-02-11 2 views
0

Я использую MySQL Server Management Studio и пытаюсь создать взвешенную сумму для категоризации песен. Вот мой ЗЕЬЕСТ:Группировка взвешенного подсчета в MySQL с использованием CASE

SELECT 
    TSongs.intSongID 
    ,TSongs.strSongName 
    ,CASE 
     WHEN TUFS.intSortOrder = 1 THEN 5 
     WHEN TUFS.intSortOrder = 2 THEN 3 
     WHEN TUFS.intSortOrder = 3 THEN 1 
     ELSE       0 
    END AS intFavoriteSongCount 
FROM 
    TSongs 
     LEFT OUTER JOIN TUserFavoriteSongs AS TUFS 
     ON(TSongs.intSongID = TUFS.intSongID) 
GROUP BY 
    TSongs.strSong 
    ,TSongs.intSongID 
    ,TUFS.intSortOrder 
ORDER BY 
    intFavoriteSongCount 

Взвешивание происходит следующим образом: Каждый «пользователь» в базе данных есть любимые песни, отсортированные по intSortOrder. В идеале вывод этой инструкции SELECT показывал каждую песню один раз, а также сумму суммарного взвешенного итога для песни. Как и сейчас, она показывает каждую песню несколько раз, один раз за каждый раз, когда она появляется в «любимом» списке пользователей.

Вот изображение, чтобы объяснить, что текущий вопрос:

Current, problematic table display.

Как я мог остановить это происходит?

ответ

0

ВЫБОР TSongs.intSongID , TSongs.strSongName , CASE ПРИ TUFS.intSortOrder = 1 ТОГДА 5 ПРИ TUFS.intSortOrder = 2 ТОГДА 3 ПРИ TUFS.intSortOrder = 3 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК intFavoriteSongCount ОТ TSongs левое внешнее соединение TUserFavoriteSongs AS TUFS ON (TSongs.intSongID = TUFS.intSongID) GROUP BY TSongs.intSongID ORDER BY intFavoriteSongCount

+0

К сожалению, этот пример не выполняется, поскольку strSong и intSortOrder должны находиться в разделе GROUP BY или запрос не будет запущен. Точная ошибка буквально «Столбец» TSongs.strSong «недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY». Если я добавлю все столбцы в раздел GROUP BY, то запрос будет точно таким же, как тот, который я использую. – user3530169

Смежные вопросы