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

标签 mysql filter distinct group-concat

我使用 MYSQL 有 3 个表关系;

首先作为乘客表的示例:

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 和 bib: 219 is 140,110 的输出 seriPoint。但是,当我不使用 DISTINCT 获取 bib: 202 的输出 seriPoint 是 200,200,200,200 和 bib: 219 是 140,110,140,​​110 时。我想要的是 bib: 202 是 200,200 和 bib: 219 是 140,110 的输出 seriPoint

添加:请帮忙添加过滤器,对于season_id,当不同的season_id时它是不同的行。

最佳答案

是的,由于您使用了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;

关于mysql - 如何正确使用不同的 group_concat - MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35006863/

相关文章:

mysql - 如何在Delphi中打乱记录表?

mysql - 如何编写一个 SQL INSERT 查询来避免重复某一行范围内的数据

javascript - 创建搜索栏以将数组过滤到表中

java - java api中脚本评分与函数评分过滤器的结合

Elasticsearch,如何返回两个字段的唯一值

sql - 选择不同的和内部连接图像数据类型

php - jQuery Ajax mysql 记录删除不起作用

php - 在不合逻辑的格式日期之间转换(更改/斜线/到 -dash- )

jquery - jquery 多个选择器

mysql - 带 as 子句的 DISTINCT