簡體   English   中英

然后對Oracle sql組進行排序

[英]Oracle sql group by then sort

我試圖將我的查詢結果分成兩組,一組有Y標志,另一組有N標志。然后我需要根據兩件事對組進行排序。

這是我嘗試過的查詢,它不適用於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

任何有關這方面的幫助都會很棒,所以請提前感謝任何回復

可能值得澄清的是,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

看起來你根本不需要這個小組。

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

您選擇的所有列都必須位於您的組中,除非您對它們進行匯總。 所以在這種情況下,您的查詢將變為:

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使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM