Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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
Oracle sql组,然后按排序_Sql_Oracle - Fatal编程技术网

Oracle sql组,然后按排序

Oracle sql组,然后按排序,sql,oracle,Sql,Oracle,我试图将查询结果分为两个组,一个标记为Y的组和一个标记为N的组。然后,我需要根据两件事对组进行排序 以下是我尝试过的查询,它不适用于按位分组: SELECT location, country FROM web_loc_info WHERE flag = 'Y' OR flag = 'N' AND available_online = 'Y' GROUP BY flag ORDER BY co

我试图将查询结果分为两个组,一个标记为Y的组和一个标记为N的组。然后,我需要根据两件事对组进行排序

以下是我尝试过的查询,它不适用于按位分组:

SELECT      location, 
        country 
FROM        web_loc_info 
WHERE       flag = 'Y' 
OR      flag = 'N' 
AND         available_online = 'Y' 
GROUP BY    flag 
ORDER BY    country, 
                location_desc

这方面的任何帮助都是非常好的,因此提前感谢您的回复

您选择的所有列都需要在您的分组中,除非您对它们进行聚合。因此,在本例中,您的查询将变成:

SELECT      location, 
            country 
FROM        web_loc_info 
WHERE       flag = 'Y' 
OR          flag = 'N' 
AND         available_online = 'Y' 
GROUP BY    flag,
            location, 
            country,
            location_desc
ORDER BY    country, 
            location_desc

location\u desc
也是需要的,因为您按
的顺序使用它

似乎根本不需要该组

SELECT      location, 
            country 
FROM        web_loc_info 
WHERE       flag in ( 'Y' , 'N' )
AND         available_online = 'Y' 
ORDER BY    flag desc,
            country, 
            location_desc
我可以试试这个

SELECT location, country FROM web_loc_info WHERE flag = 'Y' OR flag = 'N' AND     
available_online = 'Y'  ORDER BY FLAG,country, location_desc

可能需要澄清的是,Oracle中的“组”(来自
GROUP BY
操作)是指将一行或多行原始数据合并到结果中的一行

回顾:

SELECT flag FROM web_loc_info GROUP BY flag ORDER BY flag
相当于

SELECT DISTINCT flag FROM web_log_info ORDER BY flag
(如果标志列仅包含Y和N值,则两个查询都将返回2行。)

因此,将来,当您想到“group”时,请询问您的意思是“汇总数据,以便每个group值有一行”(在本例中,标志列中的“Y”/“N”值)在这种情况下,
GROUP BY
子句可能就是您想要的,或者如果您只是想将具有相同值的排序行放在一起,那么您只需查看
ORDER BY

我想说上面的Randy和Harshit非常接近,只是我会在选择列表中包括FLAG列,这样您就可以看到位置和国家值属于哪个“组”(并且在分组发生中断的地方很明显):


您能定义“不工作”吗?您的查询的预期输出是什么?如果您在
标记上分组,则需要在其他列上进行聚合。例如,您是否需要
位置
国家
计数
?还是希望返回所有数据,并仅在
标志上首先排序?也许您想在
标志
上下单,但只在第一行打印
标志
?在WHERE子句中混合使用OR和and时,应使用括号阐明您的意图。
SELECT      flag,
            location, 
            country 
FROM        web_loc_info 
WHERE       flag IN ('Y', 'N')
AND         available_online = 'Y' 
ORDER BY    flag, -- DESC if you want the Y rows to show first
            location, -- DESC? or is there actually a column called LOCATION_DESC?
            country