SELECT VIDEO_ID,MAX(VIDEO) AS MAX
FROM (SELECT VIDEO_ID,AVG(VIDEO_RATING)AS VIDEO
FROM VIDEO_RATING_TABLE
GROUP BY VIDEO_ID)T
GROUP BY VIDEO_ID;
这是我能得到的MAX(AVG)
。此查询的结果如下:
|VIDEO_ID | MAX | PLACE_ID
| 1 | 3.6667 | 1
| 2 | 4.0000 | 1
| 3 | 4.5714 | 2
但我希望此表中的VIDEO_ID
max
是最大的ORDER BY PLACE_ID。
SO VIDEO_ID应该是2,3 ....我可能有单个地方的多个视频,我需要来自每个地方的顶级视频......以及用户输入PLACE_ID的条件....
| VIDEO_ID | VIDEO_RATING | PLCAE_ID| USER_ID | VIDEO_RATING_ID |
| 1 | 5 | 000001 | YTER@gmail.com | 1 |
| 1 | 5 | 000001 | Z@gmail.com | 2 |
| 1 | 1 | 000002 | YTER@gmail.com | 3 |
| 2 | 1 | 000001 | YTER@gmail.com | 4 |
| 2 | 5 | 000001 | YTER@gmail.com | 5 |
| 2 | 5 | 000001 | YTER@gmail.com | 6 |
| 2 | 5 | 000001 | YTER@gmail.com | 7 |
| 3 | 5 | 000001 | YTER@gmail.com | 8 |
| 3 | 4 | 000001 | YTER@gmail.com | 9 |
| 3 | 3 | 000001 | YTER@gmail.com | 10 |
| 3 | 5 | 000001 | YTER@gmail.com | 11 |
| 3 | 5 | 000001 | YTER@gmail.com | 12 |
| 3 | 5 | 000001 | YTER@gmail.com | 13 |
| 3 | 5 | 000001 | YTER@gmail.com | 14 |
上一个查询给出的错误是ERROR 1248(42000):每个派生表都必须有自己的别名
答案 0 :(得分:0)
预先ORDER BY
MAX DESC LIMIT 1;
到您的查询
SELECT VIDEO_ID,MAX(VIDEO) AS `MAX` FROM (SELECT VIDEO_ID,AVG(VIDEO_RATING)AS VIDEO FROM VIDEO_RATING_TABLE GROUP BY VIDEO_ID)T GROUP BY VIDEO_ID ORDER BY `MAX` DESC LIMIT 1;
答案 1 :(得分:0)
试试这个:
您可以在查询中添加ORDER BY
子句:
SELECT VIDEO_ID,MAX(VIDEO) AS MAX
FROM (
SELECT VIDEO_ID,AVG(VIDEO_RATING)AS VIDEO
FROM VIDEO_RATING_TABLE
GROUP BY VIDEO_ID)T
GROUP BY VIDEO_ID
ORDER BY MAX DESC LIMIT 1;
它将按MAX
的降序对表进行排序,并选择第一行。
结果将是:
VIDEO_ID MAX
3 4.5714
请参阅SQL Fiddle
中的结果 OR 您可以在查询中添加WHERE
子句并删除GROUP BY
子句:
SELECT VIDEO_ID,VIDEO AS MAX
FROM (
SELECT VIDEO_ID,AVG(VIDEO_RATING)AS VIDEO
FROM VIDEO_RATING_TABLE
GROUP BY VIDEO_ID)T
WHERE VIDEO=MAX(VIDEO)
它会选择VIDEO_ID
最高AVG(VIDEO_RATING)
和AVG(VIDEO_RATING)
。
修改强>
根据新问题,试试这个:
SET @PlaceID =-1 ;
SELECT VIDEO_ID,MAX(MAX) as MAX,PLACE_ID
FROM (SELECT VIDEO_ID,MAX(VIDEO) AS MAX,PLACE_ID
FROM (SELECT VIDEO_ID,AVG(VIDEO_RATING)AS VIDEO,PLACE_ID
FROM VIDEO_RATING_TABLE
GROUP BY VIDEO_ID,PLACE_ID)T
GROUP BY VIDEO_ID,PLACE_ID;)
WHERE (@PlaceID =-1 OR PLACE_ID=@PlaceID)
GROUP BY PLACE_ID
将用户输入PLACE_ID
作为@PlaceID
,它将选择该地点的最高评分。
请参阅Fiddle
中的示例 添加了另一个技巧:如果您希望查看所有地点的最大值,请将-1作为@PlaceID
传递。
请参阅Fiddle
中的示例注意:如果您愿意在表VIDEO_RATING_TABLE
中向我们展示一些示例数据,我希望我们可以优化查询,从而提高性能。