Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一表两列MYSQL查询挑战_Sql_Mysql - Fatal编程技术网

一表两列MYSQL查询挑战

一表两列MYSQL查询挑战,sql,mysql,Sql,Mysql,考虑一个名为“comments”的MYSQL表,其中有两列“hostname”和“username” 如何返回按主机名排序的列表,其中第二列是与每个主机名关联的用户名列表?我知道如何使用py这样的脚本语言来实现这一点,但它是否可以作为标准的SQL查询 如果我这样做 SELECT hostname, count(distinct(username)) FROM comments GROUP BY hostname 我得到了几乎正确的结果,只是它只给出了与每个主机名关联的用户名数量,而不是与每

考虑一个名为“comments”的MYSQL表,其中有两列“hostname”和“username”

如何返回按主机名排序的列表,其中第二列是与每个主机名关联的用户名列表?我知道如何使用py这样的脚本语言来实现这一点,但它是否可以作为标准的SQL查询

如果我这样做

SELECT hostname, count(distinct(username)) 
FROM comments 
GROUP BY hostname

我得到了几乎正确的结果,只是它只给出了与每个主机名关联的用户名数量,而不是与每个主机名关联的实际用户名列表。。。尝试使用distinct(username)而不使用count()会返回语法错误。

我认为最干净的方法是只选择distinct行,并在必要时在客户端重新格式化:

SELECT DISTINCT hostname, username
FROM comments
ORDER BY hostname, username
或者,如果希望连接结果,可以使用:

您必须添加一个新的,它连接收集的用户名字符串

我想尝试一下:

输出将如下所示:

HOSTNAME     LIST_OF_USERNAMES
10.12.110.80 GOOFY,MINNIE
10.12.110.81 STAR,MOON,SUN
10.12.110.82 MARMELADE,ORANGE,JUICE,LEMON

它在Oracle 10G R2中运行良好。

注释已删除。。。你们跑得很快。谢谢,我正在尝试这些建议。+1@Justin:做一个更好的测试,GROUP_CONCAT()将最终返回与主机名关联的所有用户名。是的,这样做(GROUP_CONCAT)太棒了。我没有尝试上面的oracle测试代码,但也为此感谢。group_concat确实是您所需要的。默认情况下,此函数将其结果限制为1024个字符。如果需要更多,可以将group_concat_max_len变量设置为更高的值。另外,如果您需要一个不同的分隔符,您可以执行
GROUP_CONCAT(DISTINCT username separator',')
该解决方案是为mysql请求的(在中搜索XMLAGG不会产生任何结果;mysql有GROUP_CONCAT,它以高效的方式精确执行请求的内容)。您是对的,该解决方案仅为mysql请求的,但我认为发布Oracle 10G R2解决方案会很有趣;-)对于那些不需要或不使用Oracle的人来说,这并不有趣(请阅读:几乎所有人)。如果我喜欢的话,我可能会找到楔形打油诗,但谁能破译它呢,更不用说关心了?
SELECT HOSTNAME,
      RTRIM(
          REPLACE(
              REPLACE(XMLAGG(XMLELEMENT("x", USERNAME)).getstringval(), '<x>', NULL),
              '</x>',
              ','
          ),
          ','
      ) LIST_OF_USERNAMES
FROM COMMENTS
GROUP BY HOSTNAME;
HOSTNAME     USERNAME
10.12.110.80 GOOFY
10.12.110.80 MINNIE
10.12.110.81 STAR
10.12.110.81 MOON
10.12.110.81 SUN
10.12.110.82 MARMELADE
10.12.110.82 ORANGE
10.12.110.82 JUICE
10.12.110.82 LEMON
HOSTNAME     LIST_OF_USERNAMES
10.12.110.80 GOOFY,MINNIE
10.12.110.81 STAR,MOON,SUN
10.12.110.82 MARMELADE,ORANGE,JUICE,LEMON