Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
519
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. require 'sqlite3'
  2.  
  3. db_file_path = File.join(File.dirname(__FILE__), "jukebox.sqlite")
  4. db = SQLite3::Database.new(db_file_path)
  5.  
  6. # Queries
  7.  
  8. def number_of_rows(db, table_name)
  9. # TODO: count number of rows in table table_name
  10. result = db.execute("SELECT COUNT(*) FROM #{table_name}")
  11. result[0][0]
  12. end
  13.  
  14. def sorted_artists(db)
  15.  
  16. # TODO: return array of artists' names sorted alphabetically
  17. result = db.execute("SELECT name FROM artists
  18. ORDER BY name ASC LIMIT(3)")
  19. result.map{|a| a[0]}
  20.  
  21. end
  22.  
  23. def love_tracks(db)
  24. # TODO: return array of love songs
  25. result = db.execute("SELECT name FROM tracks WHERE name LIKE '%love%'")
  26. result.flatten
  27. end
  28.  
  29. def long_tracks(db, min_length)
  30. # TODO: return tracks verifying: duration > min_length (minutes)
  31. result = db.execute("SELECT name, milliseconds FROM tracks WHERE milliseconds > #{min_length*60000} ORDER BY milliseconds LIMIT(5)")
  32. result.map!{|r| {name: r[0], time: r[1]/60_000} }
  33. end
  34.  
  35. # Joins
  36.  
  37. def detailed_tracks(db)
  38. # TODO: return the list of tracks with their album and artist
  39.  
  40. result = db.execute("SELECT tracks.name, albums.title, artists.name from albums
  41. join tracks on tracks.album_id = albums.id
  42. join artists on albums.artist_id = artists.id
  43. limit 3 ")
  44. end
  45.  
  46. def stats_on(db, genre_name)
  47. # TODO: For the given category of music, return the number of tracks and the average song length (as a stats hash)
  48. result = db.execute("SELECT COUNT(*), AVG(milliseconds) FROM tracks
  49.  
  50. JOIN genres ON genres.id = tracks.genre_id
  51. WHERE genres.name = '#{genre_name}'
  52. GROUP BY genres.name
  53.  
  54. ")
  55.  
  56. {count: result[0][0], time: (result[0][1]/60000).round(2)}
  57. end
  58.  
  59. def top_five_artists(db, genre_name)
  60. # TODO: return list of top 5 rock artists
  61. result = db.execute("SELECT artists.name, COUNT(*) AS c
  62. FROM tracks JOIN albums ON albums.id = tracks.album_id
  63. JOIN artists ON artists.id = albums.artist_id
  64. JOIN genres ON genres.id = tracks.genre_id
  65. WHERE genres.name = '#{genre_name}'
  66. GROUP BY artists.name
  67. ORDER BY c DESC LIMIT(5)
  68. ")
  69. end
  70.  
  71.  
  72. # ['artists','albums','tracks','genres'].each do |table_name|
  73. # puts "A tabela #{table_name} tem #{number_of_rows(db, table_name)}"
  74. # end
  75.  
  76. # p sorted_artists(db)
  77.  
  78. # p love_tracks(db)
  79.  
  80. #p long_tracks(db, 2)
  81.  
  82. # p detailed_tracks(db)
  83.  
  84. #p stats_on(db, 'Rock')
  85.  
  86. p top_five_artists(db, "Rock")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement