首页 > 解决方案 > 汇总值后将返回记录限制为 5

问题描述

请有人帮忙。我在这个查询中总结了一个组列,但是当我使用表别名或者即使我没有使用表别名时,外部的内部查询列也无法识别。目的是返回从第一个表中按名称进行汇总和分组后具有最高值的记录。我得到的错误是无法识别外部查询中引用的子查询列。它不能用别名或子查询中没有别名来识别它们。

SELECT t1.fullname, t2.col2, t2.col3, t2.qty AS 'QUANTITY', t2.value AS 'VALUE', 
YEAR(t2reg_date) AS 'YEAR'
FROM table1 t1  
JOIN  
(
   SELECT col2, col3, SUM(qty) AS 'QUANTITY', SUM(value) AS 'VALUE', 
YEAR(date) AS 'YEAR' FROM table2 WHERE YEAR(date) BETWEEN '2012' AND '2019' AND 
col3 LIKE '%test%' 
GROUP BY foreign_col_id 
HAVING value > 1000000
) t2
ON t1.id = t2.foreign_col_id 
GROUP BY t1.fullname
ORDER BY t2.value DESC
LIMIT 5;

我还观察到 SUM() 在分组时不能与 LIMIT 一起使用,它总是返回空集。

标签: mysql

解决方案


子查询会根据您选择的内容生成一个带有列名的“表”。您选择 col2 和 col3,因此有“列”t2.col2 和 t2.col3。但是当您指定别名时,如在 中SUM(qty) AS 'QUANTITY',别名将用作列名。因此,要在外部查询中引用它,请使用 t2.QUANTITY。


推荐阅读