결과

2014-10-17 5 views
0

내 데이터베이스에 두 개의 테이블이를 가져가 그룹을 사용 :
나는 각각에 대해 가장 많이 조회 한 노래와 노래 테이블에서 모든 예술가를 가져 오기 할결과

song => id, name, song_ref, views 
artist => id, name 

.
MAX(views)을 사용하여 최대보기 값을 얻으려고했지만이 관련 노래의 다른 입력란을 가져 오는 데 성공하지 못했습니다.

SELECT a.name, MAX(s.views) FROM song s inner join artist a 
ON s.artist_ref = a.idArtist GROUP BY a.name 

어떤 아이디어가 있습니까? 고마워요

+0

SELECT 절에 원하는 열을 추가 했습니까? – DaveCoast

+0

예, 최대보기와 관련이없는 임의의 결과가 표시됩니다 – Rawhi

답변

2

을이 시도 :

SELECT * 
FROM 
    (SELECT a.id AS aid, 
      a.name AS artist, 
      s.id AS sid, 
      s.name AS most_viewed, 
      s.views 
    FROM artist a 
    INNER JOIN song s ON s.artist_ref=a.id 
    ORDER BY a.id, 
      s.views DESC) c 
GROUP BY c.aid; 
+0

완벽한, 고맙습니다. – Rawhi

1

제 첫 대답이 잘못되었습니다. 여기에 작동하는 수정 된 버전입니다 :

SELECT a.idArtist AS aid, a.name, s.id AS sid, s.views 
FROM artist a INNER JOIN song s ON a.idArtist = s.artist_ref 
INNER JOIN (SELECT MAX(views) AS views, artist_ref FROM song GROUP BY artist_ref) max_songs 
ON s.artist_ref = max_songs.artist_ref AND s.views = max_songs.views 
ORDER BY a.name 
+0

작동하지만 가장 많이 본 노래는 반환하지 않았습니다. – Rawhi

0

이 시도 ..

SELECT a.name, 
(SELECT s.views FROM song s WHERE s.name=a.name 
ORDER BY s.views DESC LIMIT 0,1) as `views` 
FROM artist a 
0

이 바이올린 올바른 값을 반환합니까 (편집 바이올린 링크 이름과 가장 많이 본 노래가있는 행에 대해 연관된 열을 리턴하는 작동중인 SQL 문 포함).

Link to Fiddle

그것은 테스트 데이터를 다음과 같은 SQL 문을 보여줍니다.

SELECT a.Name, a.songRef, Views, aName FROM artist b 
INNER JOIN song a on a.Name = b.aName 
    WHERE Views = 
     (SELECT MAX(Views) from Song as z 
     WHERE z.Name = b.aName) GROUP BY a.name, b.aName, a.songRef 
+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. – mrt

+0

@mrt 바이올린에 대한 링크를 따라 가다 보면 기본이 아님을 확인했거나 하이퍼 링크 텍스트가 "MAX (Views)가있는 GROUP BY 예"라는 사실이었고, 이는 가치없는 SQL 문으로 쉽게 해석 될 수있었습니다. 답변이 수정되었습니다. – DaveCoast

+0

물론 그랬습니다. 어쨌든, 귀하가 귀하의 답변을 편집 했으므로 불만 사항이 더 이상 유효하지 않습니다. ;) – mrt