我试图从外部查询中的每一行获取一个串联列表,但我在“where 子句”中得到未知列“outter_client”
我发现您无法访问外部来自子查询的变量,有没有办法在没有存储过程、 View 或临时表的情况下重新构造此查询并使其正常工作?
SELECT client AS outer_client, top_domain
FROM log
JOIN (
SELECT GROUP_CONCAT(t.domain) AS top_domain
FROM (
SELECT domain
FROM log
WHERE client = outer_client
GROUP BY 1
ORDER BY SUM(bytes)
LIMIT 5
) t
) k
GROUP BY client
ORDER BY SUM(bytes)
LIMIT 5;
最佳答案
我认为您希望根据字节数为每个客户端提供前五个域。您可以使用嵌套选择和 substring_index()
/group_concat()
技巧来做到这一点:
select client,
substring_index(group_concat(domain order by sumbytes desc), ',', 5) as top5domains
from (select client, domain, sum(bytes) as sumbytes
from log
group by client, domain
) cd
group by client
order by sum(sumbytes) desc
limit 5;
关于来自子查询的 MySQL GROUP_CONCAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24336887/