2

我试图将我的查询结果分成 2 组,一组带有 Y 标志,一组带有标志 N。然后我需要根据 2 件事对组进行排序。

这是我尝试过的查询,它不适用于 GROUP BY 位:

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

对此的任何帮助都会很棒,因此在此先感谢您的任何回复

4

4 回答 4

5

可能值得澄清的是,Oracle 中的“GROUP”(来自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 行。)

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

我想说上面的 Randy 和 Harshit 非常接近,只是我会在 SELECT 列表中包含 FLAG 列,这样你就可以看到 LOCATION 和 COUNTRY 值属于哪个“组”(并让分组中断发生的位置很明显):

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
于 2013-07-31T17:57:30.330 回答
3

看来您根本不需要该组。

SELECT      location, 
            country 
FROM        web_loc_info 
WHERE       flag in ( 'Y' , 'N' )
AND         available_online = 'Y' 
ORDER BY    flag desc,
            country, 
            location_desc
于 2013-07-31T16:04:42.700 回答
2

可以试试这个

SELECT location, country FROM web_loc_info WHERE flag = 'Y' OR flag = 'N' AND     
available_online = 'Y'  ORDER BY FLAG,country, location_desc
于 2013-07-31T16:05:02.853 回答
1

您选择的所有列都需要在您的分组依据中,除非您对它们进行聚合。因此,在这种情况下,您的查询将变为:

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_desc也需要,因为您在order by.

于 2013-07-31T16:02:14.167 回答