来自子查询的 MySQL GROUP_CONCAT

标签 mysql sql

我试图从外部查询中的每一行获取一个串联列表,但我在“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/

相关文章:

jquery - 使用 Jquery Bootgrid 的 Asp.Net MVC 应用程序不显示任何结果

mysql - 错误: SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: )

sql - 有效识别差异

mysql - MySQL 中文本列表的长度(基本字符串操作)

php - 将下拉表单数据发送到php进行数据库查询

javascript - 单击时可下载文件的超链接,并为每次下载增加一个字段

php - 是不是所有的数据库都使用USE语句来切换数据库?

sql - 选择查询的问题

jquery - 按一列无索引或两列其中一列有索引进行搜索

mysql - 如果表 1 有 2 行与表 2 匹配,则 INNER JOIN