仅在满足条件时才使用GROUP BY

时间:2018-01-08 09:58:23

标签: mysql group-by conditional-statements

我有一个包含文章和选项列表A的表格。有时我需要将选项列表组合起来总结要被选为一次的文章(例如文章A(3x)),在某些情况下我需要显示项目未分组(A条(1x),A条(1x),A条(1x))

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

现在,如果我可以在GROUP BY上使用条件

那就太好了

OUTPUT未分组

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

OUTPUT分组

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

我不是这样做的,但我认为理解我的目标是有帮助的。

取决于列的值&#34;键入&#34;我想输出数据,分组或未分组。

我怎么能达到这个目的?

1 个答案:

答案 0 :(得分:0)

不确定您的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上的示例。