Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL分组依据以包括备用列值_Sql_Oracle - Fatal编程技术网

SQL分组依据以包括备用列值

SQL分组依据以包括备用列值,sql,oracle,Sql,Oracle,我有下表: ID,col1,col2,total 1,artist1,artist2,3 2,artist2,artist1,4 如何将列col1和col2分组并求和总数,以便在类似的情况下得到: artist1,artist2, 7 如果两行包含相同的两个值,但这些值位于相反的列中,如果这有意义的话,我仍然想要两行的总和 大多数数据库都有least()和grest()。如果是,您可以执行以下操作: select least(col1, col2), greatest(col1, col2

我有下表:

ID,col1,col2,total
1,artist1,artist2,3
2,artist2,artist1,4
如何将列col1和col2分组并求和总数,以便在类似的情况下得到:

artist1,artist2, 7 

如果两行包含相同的两个值,但这些值位于相反的列中,如果这有意义的话,我仍然想要两行的总和

大多数数据库都有
least()
grest()
。如果是,您可以执行以下操作:

select least(col1, col2), greatest(col1, col2), sum(total)
from t
group by least(col1, col2), greatest(col1, col2);

对于不这样做的数据库,使用
case

可以很容易地实现相同的逻辑,通过不同(相反)列的相等性筛选行,您应该在表本身上使用内部联接,并使用相反列作为联接的条件:

select t1.col1, t1.col2 from YOURTABLE t1
inner join YOURTABLE t2
on t1.col1 = t2.col2
and t1.col2 = t2.col1;
如果不需要所有艺术家在所有列中都相同的行对(“artist1”也在col1和col2中,并且在这两行中),则需要过滤掉以下情况:

select t1.col1, t1.col2 from YOURTABLE t1
inner join YOURTABLE t2
on t1.col1 = t2.col2
and t1.col2 = t2.col1
and t1.col1 <> t1.col2; 
从表t1中选择t1.col1、t1.col2
内部联接表t2
关于t1.col1=t2.col2
t1.col2=t2.col1
t1.col1和t1.col2;
选择所需的行后,可以对它们的总数求和。您将获得所需的结果:

select sum(t1.total) from YOURTABLE t1
inner join YOURTABLE t2
on t1.col1 = t2.col2
and t1.col2 = t2.col1
and t1.col1 <> t1.col2;
从表t1中选择总和(t1.total)
内部联接表t2
关于t1.col1=t2.col2
t1.col2=t2.col1
t1.col1和t1.col2;
如果您需要用这个总数显示艺术家姓名,您应该指定应该显示哪个艺术家(第一行或第二行,或者什么?)。您没有为此指定任何条件。可以使用最小和最大函数、最小和最大函数或任何其他多行函数。以下是一个例子:

select min(t1.col1), max(t1.col2), sum(t1.total) from YOURTABLE t1
inner join YOURTABLE t2
on t1.col1 = t2.col2
and t1.col2 = t2.col1
and t1.col1 <> t1.col2;
从表t1中选择min(t1.col1)、max(t1.col2)、sum(t1.total)
内部联接表t2
关于t1.col1=t2.col2
t1.col2=t2.col1
t1.col1和t1.col2;

希望这有帮助

添加更多的示例表数据和预期结果-全部为格式化文本,而不是图像。同时显示您当前的查询尝试。请编辑您的问题,我们需要更多信息。你真正需要什么?从XTABLE group by col1、col2?中选择总和(总计),以使其更清晰@abr@MelosMojo . . . 用你正在使用的数据库标记你的问题。Done@GordonLinoff抱歉,我不经常使用S.O