min&max与一些连接

v8wbuo2f  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(497)

我试图同时显示最小值和最大值,同时加入几个表以获取它们的信息。我得到的最小值和最大值,但它显示了我的其他领域的错误信息。

  1. SELECT
  2. SONG.SONG_NAME,
  3. ALBUM.ALBUM_NAME,
  4. ARTIST.ARTIST_NAME,
  5. MAX(SONG.LENGTH_SECONDS) AS LENGTH
  6. FROM SONG
  7. JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
  8. JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID
  9. UNION
  10. SELECT
  11. SONG.SONG_NAME,
  12. ALBUM.ALBUM_NAME,
  13. ARTIST.ARTIST_NAME,
  14. MIN(SONG.LENGTH_SECONDS)
  15. FROM SONG
  16. JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
  17. JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID;

以下是我通过查询得到的结果:

  1. | SONG_NAME | ALBUM_NAME | ARTIST_NAME | LENGTH |
  2. +------------------------+---------------------------+----------------+--------+
  3. | Fluorescent Adolescent | Favourite Worst Nightmare | Arctic Monkeys | 390 |
  4. | Fluorescent Adolescent | Favourite Worst Nightmare | Arctic Monkeys | 177 |
wfauudbj

wfauudbj1#

您可以从“选择”菜单中删除“最大值和最小值”,然后添加一个“顶部1”。然后添加order by song.length\u seconds以获得最短的歌曲,并添加order by song.length\u seconds desc以获得最长的歌曲。

  1. SELECT TOP 1
  2. SONG.SONG_NAME,
  3. ALBUM.ALBUM_NAME,
  4. ARTIST.ARTIST_NAME,
  5. SONG.LENGTH_SECONDS AS LENGTH
  6. FROM SONG
  7. JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
  8. JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID
  9. ORDER BY SONG.LENGTH_SECONDS DESC
  10. UNION
  11. SELECT TOP 1
  12. SONG.SONG_NAME,
  13. ALBUM.ALBUM_NAME,
  14. ARTIST.ARTIST_NAME,
  15. SONG.LENGTH_SECONDS AS LENGTH
  16. FROM SONG
  17. JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
  18. JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID;
  19. ORDER BY SONG.LENGTH_SECONDS
展开查看全部
cbeh67ev

cbeh67ev2#

假设您正在为每个艺术家和专辑查找歌曲的最小和最大持续时间,并为这些歌曲获取歌曲名称
您可以使用按歌曲分组的联合。album\u id、album.album\u name、artist.artist\u name与歌曲合并以获得正确的歌曲名称

  1. select song.song_name, t.ALBUM_NAME, t.ARTIST_NAME, t.LENGTH
  2. from song
  3. inner join (
  4. SELECT
  5. SONG.ALBUM_ID
  6. ALBUM.ALBUM_NAME,
  7. ARTIST.ARTIST_NAME,
  8. MAX(SONG.LENGTH_SECONDS) AS LENGTH
  9. FROM SONG
  10. JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
  11. JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID
  12. GROUP BY SONG.ALBUM_ID,ALBUM.ALBUM_NAME, ARTIST.ARTIST_NAME
  13. ) T on song.album_id = t.album_id and t.LENGTH = song.LENGTH_SECONDS
  14. UNION
  15. select song.song_name, t.ALBUM_NAME, t.ARTIST_NAME, t.LENGTH
  16. from song
  17. inner join (
  18. SELECT
  19. SONG.ALBUM_ID
  20. ALBUM.ALBUM_NAME,
  21. ARTIST.ARTIST_NAME,
  22. MIN(SONG.LENGTH_SECONDS) AS LENGTH
  23. FROM SONG
  24. JOIN ALBUM ON ALBUM.ALBUM_ID = SONG.ALBUM_ID
  25. JOIN ARTIST ON ARTIST.ARTIST_ID = SONG.ARTIST_ID
  26. GROUP BY SONG.ALBUM_ID,ALBUM.ALBUM_NAME, ARTIST.ARTIST_NAME
  27. ) T on song.album_id = t.album_id and t.LENGTH = song.LENGTH_SECONDS
展开查看全部

相关问题