Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sqlzoo track join exercise

Tags:

sql

join

I've found a great site to practice sql - http://sqlzoo.net. my sql is very weak that is why i want to improve it by working on the exercises online. But i have this one problem that I cannot solve. can you please give me a hand.

3a. Find the songs that appear on more than 2 albums. Include a count of the number of times each shows up.

album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

my answer is incorrect as i ran the query.

 select a.song, count(a.song) from track a, track b
 where a.song = b.song
a.album != b.album
group by a.song
having count(a.song) > 2

thanks in advance! :D

like image 567
lia reyes Avatar asked Sep 24 '26 04:09

lia reyes


2 Answers

I realize this answer may be late but for future reference to anyone taking on this tutorial the answer is as such

SELECT track.song, count(album.title)
FROM album INNER JOIN track ON (album.asin = track.album)
GROUP BY track.song
HAVING count(DISTINCT album.title) > 2

Some things that my help you in your quest for this query is that what to group by is usually specified by the word each. As per the tip presented in the previous answers you want to select by distinct albums, SINCE it mentioned in the database description that album titles would be repeated when the two tables are joined

like image 128
Bryan Baraoidan Avatar answered Sep 26 '26 19:09

Bryan Baraoidan


Your original answer is very close, with the GROUP BY and HAVING clause. What is wrong, is just that you don't need to join the track table against itself.

SELECT song, count(*)
FROM track
GROUP BY song
HAVING count(*) > 2

Another answer here uses COUNT(DISTNCT album), which is necessary only if a song can appear on an album more than once.

like image 29
MatBailie Avatar answered Sep 26 '26 19:09

MatBailie



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!