[英]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.