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;
三个注意事项:
表别名使查询更易于编写和阅读。使用它们。 不要对列别名使用单引号。单引号只能用于字符串和日期常量。 我猜ranking
在eventitems
中,但它可能在另一个表中。
【讨论】:
谢谢,我会尽快用我的数据库架构更新问题 我是一名 MS SQL 专家,所以这一切都非常有用!以上是关于MySQL - 使用不在列表中的列对 Group By 语句排序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在窗口函数中使用不在 Group By 中的列,我得到: SQL 编译错误:[COLUMN_A] is not a valid group by expression