如何正确使用不同的 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。但是当我不使用DISTINCT
为bib: 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 而没有区别?
如何使用 Google Big Query 在 GROUP_CONCAT 上获取不同的值