组合SQL中的条目

时间:2016-08-09 12:08:43

标签: mysql sql

我不确定如何在SQL中执行以下操作。我尝试以不同的方式使用GROUP BY和HAVING,但都没有。

我有一张这样的表:

Title   Value 1   Value 2 ...
0       3         7
1       4         8
2       5         9
(empty) 6         10
0       1         2

此处,(empty)不是字符串。我只是把它放在那里表明那个表格单元格是empty(null)。我想只显示一个更改此表。标题为0 or (empty)的所有行都“合并”为一行,标题为0,值为1 = Sum(all Value 1s),值为2 = Sum(all Value 2s)。其他一切都保持不变。 所以,在上面的例子中,我想看到:

Title   Value 1   Value 2 ...  
0       10        19
1       4         8
2       5         9

有人可以帮忙吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

这是一个case的汇总查询:

select (case when title is null or title = 0 then 0 else title end) as title,
       sum(value1) as value1, sum(value2) as value2
from t
group by (case when title is null or title = 0 then 0 else title end)
order by title;

如果您愿意,也可以使用逻辑:

select coalesce(title, 0) as title,
       sum(value1) as value1, sum(value2) as value2
from t
group by coalesce(title, 0)
order by title;

答案 1 :(得分:2)

你可以试试这个:

SELECT 
IF(Title ='(empty)',0,Title) AS title_col,
SUM(value1) as Value_1,
SUM(value2) as Value_2
FROM your_table
GROUP BY title_col;

注意:

如果Title列实际上包含此字符串(empty),那么您可以使用此查询。

修改

如果列的数据类型为INT,则如果它被声明为ALLOW NULL,则它可以具有空值。

如果是,那么查询将被修改如下:

SELECT 
IF(Title IS NULL,0,Title) AS title_col,
SUM(value1) as Value_1,
SUM(value2) as Value_2
FROM your_table
GROUP BY title_col;

答案 2 :(得分:1)

我看到两个查询,一个用于标题记录,另一个用于非标题记录的聚合。使用UNION ALL将两个结果粘合在一起:

select title, value1, value2
from my table where coalesce(title, 0) <> 0
union all
select 0, sum(value1), sum(value2)
from my table where coalesce(title, 0) = 0
group by title
order by title;

(如果表中所有title&lt;&gt; 0都是唯一的,则可以使用group by coalesce(title, 0)的单个查询。)