Пытается создать список жанров с количеством треков и% треков, принадлежащих этому жанру. Ни одна из дорожек не должна быть в порядке возрастания.

Результат должен выглядеть примерно так с 3 отдельными столбцами.

Genre   No.of Tracks    % of Tracks 
Rock       5               20% 


Genre table consists of - GenreId , Name 

Track table consists of - TrackId, Name, GenreId
1
M.Jones 12 Май 2016 в 07:29

3 ответа

Лучший ответ

Проверить на sqlfiddle

SELECT g.nameOfGenre,
  COUNT(t.TrackId) AS tracks_count,
  COUNT(t.TrackId) / tt.total_tracks * 100 AS tracks_percent
FROM Genre g
  LEFT JOIN Track t ON t.GenreId = g.genreId
  JOIN (SELECT COUNT(*) AS total_tracks FROM Track) AS tt
GROUP BY g.genreId

Простой пример. Вы можете округлить проценты, если хотите.

2
Andrew 12 Май 2016 в 05:11

ИЗМЕНИТЬ : после просмотра комментария OP я считаю, что следующий запрос должен быть более подходящим. В отличие от ответа ниже, я буду использовать неявное соединение.

SELECT Genre.genreName, Track.trackName, COUNT(Track.genreID) AS "Track Count", ( ( (COUNT(Track.genreID) / COUNT(Track.trackID)) * 100 ) AS "Percent Of Tracks") FROM Genre, Track WHERE Genre.genreID = Track.genreID;

ОРИГИНАЛЬНЫЙ ОТВЕТ .

Предполагая, что все они находятся в одной таблице, этого можно добиться с помощью простого запроса SELECT.

SELECT Genre, No_Of_Tracks, Percent_of_Tracks FROM Table ORDER BY No_Of_Tracks

Вы должны заменить «Genre, No_Of_Tracks, Percent_Of_Tracks» соответствующими именами столбцов, а Table - фактическим именем таблицы.

0
Unconscious Stream 12 Май 2016 в 05:19

Проверьте с помощью запроса ниже

 Select g.nameOfGenre as Genre, count(t.trackId) as "No.of Tracks", 
        concat(round(count(t.trackId)/tt.total_tracks * 100, 2),'%')  as "% of Tracks" 
 from Track t
 join Genre g on g.genreID = t.genreID
 join (SELECT COUNT(*) AS total_tracks FROM Track) AS tt
 group by g.genreID
0
KP. 12 Май 2016 в 05:49