2013-11-21 111 views
0

我的數據庫中選擇元素,我有以下模式:最大平均

table: files 
columns: fileId, authorId, fileSize 

table: authors 
columns: authorId, surname, firstName 

現在我還想選擇哪個文件大小爲最高平均筆者的AUTHORID。我現在對於如何最好地加入這些表格有點無知。我已經能夠爲作者選擇平均文件大小,但現在必須擴展它以與每位作者一起工作。

SELECT AVG(`fileSize`) FROM (
    SELECT `fileSize`, `files`.`authorId` FROM `files` 
     INNER JOIN `authors` aut ON `files`.authorId = aut.authorId 
    WHERE aut.authorId = 6) 
as T; 
+0

您使用的是哪種數據庫服務器? –

+0

我正在使用mysql數據庫。 – Muepe

回答

2

如果只需要authorId,你可以只通過files表發現:

SELECT authorId 
FROM files 
GROUP BY authorId 
ORDER BY AVG(fileSize) DESC 
LIMIT 1 ; 

如果你想爲這個作者的其他數據還有,你能雄以前派生表並將它加入到authors

SELECT a.*       -- the columns you need 
FROM authors AS a 
    JOIN 
    (SELECT authorId 
    FROM files 
    GROUP BY authorId 
    ORDER BY AVG(fileSize) DESC 
    LIMIT 1 
) AS m 
    ON m.authorId = a.authorId ; 
1

下應該給你的文件的平均大小順序的作者列表。

SELECT AVG(files.fileSize), aut.authorId, aut.firstname, aut.surname 
FROM files 
INNER JOIN authors aut ON files.authorId = aut.authorId 
GROUP BY aut.authorId 
ORDER BY AVG(files.fileSize) DESC; 

SQL Fiddle example

你可以離開AVG(files.fileSize)出選擇的,它仍然可以工作。

如果你只想要一個最大值(或者所有最大值的關係,如果它們碰巧存在),那麼你需要深入一點。
下面的堆棧溢出問題應該有所幫助。
SQL Select only rows with Max Value on a Column

相關問題