选择最大平均值的元素

时间:2013-11-21 16:56:01

标签: mysql sql

在我的数据库中,我有以下架构:

table: files
columns: fileId, authorId, fileSize

table: authors
columns: authorId, surname, firstName

现在我想选择具有最高fileSize平均值的作者的authorId。我现在对如何最好地加入这些表格感到有点无能为力。我已经能够为作者选择平均的fileSize,但现在必须扩展它以适应每个作者。

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;

2 个答案:

答案 0 :(得分: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 :(得分: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)退出选区,它仍可以使用。

如果你只想要一个最大值(或者所有关系最大值,如果它们恰好存在),你需要深入挖掘一下。
以下Stack Overflow问题应该有所帮助 SQL Select only rows with Max Value on a Column