mysql - 如何按列值分组?

标签 mysql sql

假设我有这两个表

公司

CompanyId 
Name
State
Country

追踪

Id
CompanyId
Activity
hitDate

现在我可以得到这样的一些数据

公司表

1 Company1 AK USA
2 Company2 TX USA

跟踪表

1 1 'First Page'  2018-01-01
2 1 'Second Page' 2018-01-01
3 2 'First Page'  2018-01-01

现在我想按州和国家将这些表连接在一起

 SELECT 
      Count(*) as TotalCount, 
      company.State as State, 
      company.Country as Country, 
      tracking.Activity as Activity
 FROM tracking
 INNER JOIN companies 
    ON tracking.CompanyId=company.CompanyId 
   AND tracking.Activity IN ('First Page', 'Second Page') 
   AND companies.Country = 'USA'  
   AND DATE(tracking.dDateTime) BETWEEN '2018-02-27' AND '2018-02-28'
 GROUP BY  companies.State, companies.Country
 ORDER BY companies.State 

所以我写了一个像上面这样的查询,结果如下

Total Count - 1
State - AK 
Country - USA
Activity - 'First Page'

Total Count - 1
State - AK 
Country - USA
Activity - 'Second Page'

Total Count - 1
State - Tx
Country - USA
Activity - 'First Page'

但是我想要得到这样的结果

Total Count - 2
State - AK 
Country - USA
Activity - 'First Page, Second Page'

Total Count - 1
State - Tx
Country - USA
Activity - 'First Page'

我需要某种子查询来实现吗?

最佳答案

您正在寻找 group_concat :

select ...  GROUP_CONCAT(tracking.Activity) as Activity

您还可以指定事件内的顺序和分隔符:

GROUP_CONCAT(tracking.Activity ORDER BY tracking.Activity SEPARATOR ', ')

关于mysql - 如何按列值分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49038024/

相关文章:

sql - Volusion 的通用 SQL 文件夹、功能

mysql - 在 MySQL select 查询中选择当前表

java - 如何纠正这个查询?

sql - 如何在 SQLite 中转换 Unix 纪元时间

mysql - SQL整数查询,查找+/- 1以内的整数

文件上的mysql加密 key 存储

java - 无法使用 IP 地址连接到 MySQL 服务器

mysql - sql中的交集

php - 从 db mysql 获取单个值时出现问题

php - 使用 PHP 数组实现 AND 功能的 SQL 查询