MySQL - 使用不在列表中的列对 Group By 语句排序 [重复]

Posted

技术标签:

【中文标题】MySQL - 使用不在列表中的列对 Group By 语句排序 [重复]【英文标题】:MySQL - Order a Group By Statement With a Column Not in List [duplicate] 【发布时间】:2015-11-09 03:52:33 【问题描述】:

这是我的 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,在“艺术家姓名”列下,我得到一个按排名顺序排列的艺术家列表?

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

【问题讨论】:

GROUP BY 是做什么的? 我应该把 ORDER BY 放在哪里,因为我根本没有输出排名或在表上使用 GROUP_CONCAT。对不起@Strawberry 你是什么意思它有什么作用??? 你没有使用聚合函数,那么为什么你的查询中有一个 GROUP BY 子句? 【参考方案1】:

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;

三个注意事项:

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

【讨论】:

谢谢,我会尽快用我的数据库架构更新问题 我是一名 MS SQL 专家,所以这一切都非常有用!

以上是关于MySQL - 使用不在列表中的列对 Group By 语句排序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL GROUP BY 语句

MySQL GROUP BY 语句

MySQL GROUP BY 语句

在窗口函数中使用不在 Group By 中的列,我得到: SQL 编译错误:[COLUMN_A] is not a valid group by expression

选择不在 GROUP BY 子句中的列

使用来自不同数据帧的列对多个组执行计算