我有以下查询
Select id, name, add1 || ' ' ||add2 address,
case
when subId =1 then 'Maths'
else 'Science'
End,
nvl(col1, col2) sampleCol
From Student_tbl
Where department = 'Student'
我希望按地址将此查询分组为默认
我试过
Group by add1 ,add2 ,id, name, subId, col1, col2
和
Group by add1 || ' ' ||add2,id, name,
case
when subId =1 then 'Maths'
else 'Science'
End,
nvl(col1, col2)
两组都返回相同的结果。我不确定哪个查询是正确的。 有人帮我这个吗?
答案 0 :(得分:3)
始终尝试实现您在" Group By"中的select语句中提到的所有列(具有相同格式)。聚合列除外。在你的情况下,我更喜欢第二种方法。
SELECT id
,NAME
,add1 || ' ' || add2 address
,CASE
WHEN subId = 1
THEN 'Maths'
ELSE 'Science'
END
,nvl(col1, col2) sampleCol
FROM Student_tbl
WHERE department = 'Student'
GROUP BY id
,NAME
,add1 || ' ' || add2
,CASE
WHEN subId = 1
THEN 'Maths'
ELSE 'Science'
END
,nvl(col1, col2)
我在“选择”中看不到任何汇总列。如果您的选择不需要聚合,那么您可以简单地摆脱分组。如果结果集中存在任何重复记录,则可以实现distinct。
答案 1 :(得分:1)
在您上次发表评论后,我想最终了解您对我们的期望。
两个查询都是正确的,因为对于您在SELECT子句中列出的两种方法,GROUP BY子句中都存在所有字段
你在做什么在这里有点奇怪,因为GROUP BY包含id
,我想这是每行的唯一标识符,所以你最终没有分组任何东西。您将获得与表格一样多的行。
它返回相同结果的原因纯粹是基于数据的。可能存在2个查询返回不同结果的情况。
在您的情况下,如果它返回相同的结果,则表示col1
永远不会NULL
答案 2 :(得分:1)
这两个查询不一定会给出相同的结果。哪个是正确的取决于您的要求。这是一个示例,只使用汇总输入列ADDRESS
和ADD1
得到的新ADD2
列。
假设您在一行中有ADD1 = 123 Main Street, Portland,
和ADD2 = Oregon.
然后在输出中ADDRESS = 123 Main Street, Portland, Oregon
在另一行中,您有ADD1 = 123 Main Street,
和ADD2 = Portland, Oregon
。对于此行,生成的ADDRESS
是相同的。
如果按ADDRESS
分组,则两个输出行将位于同一组中,但如果按ADD1, ADD2
分组,则它们将位于不同的组中。在此示例中,您可能希望按ADDRESS
进行分组,但在其他类似结构的情况下,可能不是您想要或需要的。