我不确定如何在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
有人可以帮忙吗?
谢谢!
答案 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)
的单个查询。)