【问题标题】:Only use GROUP BY if condition is met仅在满足条件时使用 GROUP BY
【发布时间】:2018-06-17 06:56:36
【问题描述】:

我有一个包含文章和选项列表 A 的表格。有时我需要对选项列表进行 GROUP 以总结要选择一次的文章(例如文章 A (3x) ),在某些情况下我需要显示项目未分组(文章 A (1x)、文章 A (1x)、文章 A (1x))

根据我想要显示分组或分组显示结果的选项列表的类型。

如果我可以在 GROUP BY 上使用条件,那就太好了

输出未分组

ID| EAN            | article | amount
1 | 01234567890123 | A       | 1
2 | 01234567890123 | A       | 2
3 | 01234567890123 | A       | 4
4 | 98695959292929 | B       | 1
5 | 95956562629262 | C       | 5

输出分组

ID| EAN            | article | amount
1 | 01234567890123 | A       | 7
4 | 98695959292929 | B       | 1
5 | 95956562629262 | C       | 5

 SELECT article, ean, type FROM articles 
 GROUP BY articles.ean HAVING type = "grouped" <-- This is just for explainig. It's not a real selection

我不以这种方式工作,但我认为这有助于理解我的目标。

根据“类型”列的值,我想输出分组或未分组的数据。

我该如何存档?

【问题讨论】:

  • 您的查询没有意义,因为您没有对任何内容进行分组。你想怎么分组?
  • 更新您的问题添加适当的数据样本和预期结果
  • 嗨。你没有解释你想要什么。您的示例没有用,因为它只是提出了问题,我们不知道您的意思。给出示例输入和输出,并使用语言来说明您想要的输出如何是任意情况下输入的函数。阅读minimal reproducible example 并采取行动。显示您可以编写的任何相关代码——例如,分别针对这两种情况。
  • 好的,更新了问题。我只是想知道如何在 GROUP BY 上使用基于字段值的条件。
  • 我认为这些操作必须在应用层而不是数据库层完成。

标签: mysql group-by conditional-statements


【解决方案1】:

不确定您的 type 是列还是某种绑定变量,但它应该像这样工作:

SELECT ean, article, SUM(amount) AS amount
FROM articles 
GROUP BY ean, article,
         CASE WHEN :type <> 'grouped' THEN id END;

如果type 不是'grouped',则id 用作附加列进行分组,因此不会将任何行组合在一起。

请参阅SQL Fidddle 上的示例。

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 2018-01-22
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 2017-02-09
    • 2013-02-21
    相关资源
    最近更新 更多