【发布时间】:2014-07-07 22:36:03
【问题描述】:
在 MySQL 中,我有这个查询/表
SELECT *
FROM
(
SELECT
id,
(SELECT MY_FUNCTION(id)) AS rating -- Function returns a float
FROM my_table
WHERE
/* Very long WHERE */
) AS ratings
id rating
---------- -------------
1 1.00
2 2.00
3 10.00
4 11.05
5 10.04
现在我尝试获得平均评分
SELECT *, AVG(rating)
FROM
(
SELECT
id,
(SELECT MY_FUNCTION(id)) AS rating -- Function returns a float
FROM my_table
WHERE
/* Very long WHERE */
) AS ratings
id rating AVG(rating)
---------- ------------- -------------
1 1.00 6,818
因为 AVG() 是一个聚合函数,所以其他行被剥离。我希望(不像here)保持这样的行,无需在my_table 上进行另一次选择,因为 WHERE 过于复杂,无法执行两次。像这样:
id rating AVG(rating)
---------- ------------- -------------
1 1.00 6,818
2 2.00 6,818
3 10.00 6,818
4 11.05 6,818
5 10.04 6,818
我也试过这个:Using SUM() without grouping the results 但我无法让 CROSS JOIN 与表别名一起使用,或者不执行两次复杂的 WHERE 部分。
【问题讨论】: