如何正确使用不同的 group_concat - MYSQL

Posted

技术标签:

【中文标题】如何正确使用不同的 group_concat - MYSQL【英文标题】:how to group_concat using distinct correctly - MYSQL 【发布时间】:2016-05-02 14:30:09 【问题描述】:

我有 3 个使用 MYSQL 的表关系;

首先以车手表为例:

bib   |   series_id    | point
 202         3             200
 219         3             140
 202         2             200
 219         2             110
 10          1             90

以系列表为例:

series_id   |   series_no  |   season_id
     1            1                2
     2            2                1
     3            1                1

以季节表为例:

 season_id   |   year
     1            2015
     2            2016

如何正确指向GROUP_CONCAT?我正在尝试这样

SELECT riders.bib, seasons.year, GROUP_CONCAT(DISTINCT riders.point ORDER BY series.series_no DESC) AS seriPoint 
    FROM series, riders, seasons 
    GROUP BY riders.bib

当我像这样使用DISTINCT 输出时,我得到了bib: 202 is 200 and bib: 219 is 140,110 的输出seriPoint。但是当我不使用DISTINCTbib: 202 is 200,200,200,200 and bib: 219 is 140,110,140,110 获取输出seriPoint 时。我想要的是为bib: 202 is 200,200 and bib: 219 is 140,110 输出seriPoint。

添加:也请帮忙添加过滤器,因为season_id 不同时season_id 是不同的行。

【问题讨论】:

【参考方案1】:

是的,你得到了正确的输出,因为你使用了DISTINCT。顺便说一句,您应该更改查询以使用正确的 JOINS

SELECT riders.bib, 
seasons.year, 
GROUP_CONCAT(DISTINCT riders.point ORDER BY series.series_no DESC) AS seriPoint 
FROM riders
JOIN series ON series.series_id = riders.series_id
JOIN seasons ON series.season_id = seasons.season_id
GROUP BY riders.bib;

(或)你可以先得到分组,然后像这样执行连接

select seasons.year, xx.bib, xx.seriPoint
FROM series
JOIN (  
select series_id, bib 
group_concat(point) as seriPoint 
from riders
group by bib ) xx ON series.series_id = xx.series_id
JOIN seasons ON series.season_id = seasons.season_id
order by xx.seriPoint;

【讨论】:

我想问更多。如何ORDER BY 和我的seriPoint。 200,200 = 400。感谢@Rahul @Stfvns,您可以添加order by 子句。如果有帮助,请参阅答案中的编辑(第二个查询)。

以上是关于如何正确使用不同的 group_concat - MYSQL的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GROUP_CONCAT 正确地将 MySQL 查询转换为 MSSQL 查询

如何在一个查询中的多个子查询上正确使用多个 group_concats 而没有区别?

group_concat 在多个连接上工作不正确

如何使用 Google Big Query 在 GROUP_CONCAT 上获取不同的值

如何在 sql [重复] 中使用 group_concat() 获取不同的值

MySQL 中的 GROUP_CONCAT - 如何包含不同的值?