Сложный SQL-запрос в MySQL - PullRequest
       14

Сложный SQL-запрос в MySQL

0 голосов
/ 28 августа 2009

У меня есть следующие таблицы в базе данных:

bands
- band_id
- band_name

albums  
- album_id 
- album_name  
- album_owner  

songs
- song_id
- song_name
- song_owner

ratings
- rating_id
- rating_value
- rating_song

Таблицы albums и songs относятся к band_id из таблицы bands на album_owner и song_owner.

Таблица ratings относится к song_id из таблицы songs на rating_song.

Учитывая таблицы выше, как я могу получить все группы и количество альбомов, песни и рейтинг для каждой? Рейтинги должны быть возвращены как сумма rating_value, деленная на количество ставок.

Ответы [ 2 ]

3 голосов
/ 28 августа 2009

попробуйте

Select Band_Id, Band_Name,
  (Select Count(*) From Albums 
   Where Album_Owner = B.Band_Id) AlbumCount,
  S.Song_Id, S.Song_Name,
  Avg(rating_value) Rating
From Bands B 
  Left Join Songs S 
      On S.Song_Owner = B.Band_Id
  Left Join Ratings R 
      On R.rating_song = S.Song_Id
Group By Band_Id, Band_Name, S.Song_Id, S.Song_Name
0 голосов
/ 28 августа 2009

Чтобы сделать все это в одном запросе, вам нужно использовать подзапросы.

select band_name,
(select count(*)
from album
where album_owner=band_id) as album_count,
(select count(*)
from song
where song_owner=band_id) as song_count,
(select avg(rating_value)
from song
join rating on rating_song=song_id
where song_owner=band_id) as average_rating
from band

Я предполагаю, что вы хотите получить средний рейтинг для всех песен для каждой группы. Если вы имели в виду, что хотите получить среднюю оценку для каждой песни, то на самом деле не имеет смысла делать это в виде одного запроса, потому что количество альбомов относится к группе, а не к песне, хотя я полагаю, вы могли вернуть одну строку на песню с количеством альбомов для группы, повторенной для каждой песни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...