MySQL : How to aggregate table column into a list and count?

标签 mysql sql

我在 MySql 中有一个表,例如:

URL       Browser
A         Chrome
B         Chrome 
C         Firefox
A         Chrome
A         Firefox
A         Opera
A         Chrome
B         Chrome
B         Firefox
C         Tor

URL 列的数据范围很广,但 Browser 列的数据范围有限。我想在 URL 列上聚合并按降序获取列表中每个浏览器的最高计数,例如:

URL      FrequentlyUsedBrowser 
A        [(Chrome,3),(Firefox,1),(Opera,1)]
B        [(Chrome,2),(Firefox,1)]
C        [(Chrome,1),(Tor,1)] 

我一直在为它编写 SQL 以使用窗口分区来获取每个浏览器的一个条目的计数,但无法将其放入列表中。

最佳答案

这是您的查询。这可以使用 group_concat()

实现
select url
    , concat('[', group_concat('(', browser, ',', ct, ')'), ']') as FrequentlyUsedBrowser 
    from 
    (select count(1) ct, url, browser from test
        group by url, browser) t1
group by url

参见 dbfiddle

关于MySQL : How to aggregate table column into a list and count?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58870475/

相关文章:

mysql - 通过wamp远程连接mysql

mysql - 在现有数据库上添加 FULLTEXT 索引

C# 方法中使用的变量上的上下文错误

mysql - 使用查询数据构建 sql 查询

php - phonegap- 使用 Eclipse 就绪状态 0 responsetext 状态 0 statustext 错误

java - JPA Hibernate - 将 MySQL 复合键映射到 JPA (Hibernate) 实体

php - 为什么即使应该更新一条记录,mysql_affected_rows 也会返回 0

c# - 托管在网络共享上的 SQL Server Express 数据库 - 这可能吗?

mysql - 我应该在我的网络服务上使用持久连接吗?

sql - Postgresql:如何确保索引在内存中