【问题标题】:How to GROUP BY on a GROUP_CONCAT(DISTINCT xxx) as yyyy如何对 GROUP_CONCAT(DISTINCT xxx) 进行 GROUP BY 作为 yyyy
【发布时间】:2014-01-13 18:33:26
【问题描述】:

我正在尝试对 GROUP_CONCAT 上的 MYSQL 请求进行 GROUP BY。由该 GROUP_CONCAT 生成的三个值是唯一的唯一标识符,我必须用来描述要应用 GROUP BY 的组。

当我执行以下操作时:

SELECT [...] GROUP_CONCAT(DISTINCT xxx) as supsku
[...]
GROUP BY supsku

上面写着:

无法在“supsku”上分组

非常感谢

【问题讨论】:

    标签: mysql group-concat


    【解决方案1】:

    一种尝试子选择的方法

    SELECT t.* FROM (
    SELECT [...] GROUP_CONCAT(DISTINCT xxx) as supsku
    [...]
    ) t
    GROUP BY supsku
    

    【讨论】:

    • 谢谢。我使用了您的解决方案,但它只给了我一个结果,其中所有连接值都在一行中。
    【解决方案2】:

    您不能按内容不存在的列进行分组,直到组形成之后。这是一个先有鸡还是先有蛋的问题。

    以此类推,假设我要求您刮掉一些彩票,但只有在中奖彩票的总价值超过 100 美元时才刮掉它们?显然,在刮彩票之前,您无法知道中奖值是多少,因此您不知道该不该刮。

    @MKhalidJunaid 的答案显示了部分解决方案——使用子查询生成部分结果,其中字符串分组。然后将其嵌入为 派生表 子查询,以由具有 GROUP BY 的外部查询进一步处理。

    但该解决方案的问题是我们不知道如何对内部子查询中的字符串进行分组。如果子查询中没有有效的 GROUP BY,则默认将整个表视为一个组,因此 GROUP_CONCAT 将返回一行和一个字符串。

    因此,您需要考虑更好地定义您的问题。您必须考虑其他一些分组标准。

    【讨论】:

    • 感谢您的回答。我完全理解你的意思。我可能会在之前建立一个临时表,然后在它上做一个 LEFT JOIN。再次感谢
    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多