MySQL - 使用不在列表中的列对 Group By 语句进行排序

MySQL - Order a Group By Statement With a Column Not in List

这是我的 SQL

SET group_concat_max_len = 18446744073709551615;

SELECT
    `event`.title AS 'Event Title',
    eventitem.startdate AS 'Start Date',
    `get_unique_items` (
        CONVERT (
            group_concat(eventstage.title SEPARATOR ',') USING utf8
        )
    ) AS 'Stage',
    `get_unique_items` (
        CONVERT (
            group_concat(artists.artistname SEPARATOR ',') USING utf8
        )
    ) AS 'Artist Name'
FROM
    eventstage
INNER JOIN `event` ON eventstage.eventid = `event`.eventid
INNER JOIN eventitem ON eventitem.eventstageid = eventstage.eventstageid
INNER JOIN artists ON eventitem.artistid = artists.artistid
GROUP BY
    eventstage.eventid,
    eventitem.eventstageid,
    eventitem.startdate

get_unique_items顾名思义。它删除任何重复项。

现在每条记录都有一个 eventitem 有一个 ranking 字段。每个艺术家都有一个排名,0代表最高,数字越大代表排名越低。

如何在结果中操纵 SQL,在 'Artist Name' 列下,我得到按排名顺序排列的艺术家列表?

我不认为它与 MySQL: Sort GROUP_CONCAT values 相同,因为我没有在排名字段上使用该功能 谢谢

GROUP_CONCAT() 支持 DISTINCT 关键字时,不清楚为什么您有一个单独的函数来删除重复项。我认为以下内容可以满足您的需求:

SELECT e.title AS `Event Title`,
       i.startdate AS `Start Date`,
       group_concat(DISTINCT s.title ORDER BY i.ranking SEPARATOR ',') as Stage,
       group_concat(DISTINCT a.artistname ORDER BY i.ranking SEPARATOR ',') as  `Artist Name`
FROM eventstage s INNER JOIN
     `event` e
     ON s.eventid = e.eventid INNER JOIN
     eventitem i
     ON i.eventstageid = s.eventstageid INNER JOIN
     artists a
     ON i.artistid = a.artistid
GROUP BY s.eventid, i.eventstageid, i.startdate;

三个注意事项:

  • Table 别名使查询更易于编写和阅读。使用它们。
  • 不要对列别名使用单引号。单引号只能用于字符串和日期常量。
  • 我猜 rankingeventitems 中,但它可能在另一个 table 中。