2013-07-31 38 views
2

我試圖將我的查詢結果分成2組,有一個標誌爲Y和有一個標誌爲N.我然後需要基於2件事。Oracle sql group然後排序

這裏的查詢我試過不與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 

任何幫助,這將是非常大,所以先感謝您的任何答覆

+0

你能定義'不行'嗎? – GolezTrol

+1

查詢的預期輸出是什麼?如果您在'flag'上進行分組,則需要在其他列上進行彙總。例如,你想要「位置」和「國家」的「數量」嗎?或者你想要所有的數據被返回並且只是首先在'flag'上排序?也許你想在'flag'上訂購,但只在第一行打印'flag'? –

+1

任何時候,如果在WHERE子句中混合使用OR或AND,則應使用括號來闡明您的意圖。 – Joe

回答

5

這可能是值得澄清的是,「集團」,在甲骨文(從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」詢問你的意思是「彙總數據,以便每個組值有一行」(在這種情況下,標誌列中的「Y」/「N」值),在這種情況下GROUP BY子句可能是您在追蹤的內容,或者您​​只是想將具有相同值的行整理在一起,在這種情況下,您只需查看ORDER BY

我想說上面的Randy和Harshit是非常接近的只有我會在SELECT列表中包含FLAG列,以便您可以看到LOCATION和COUNTRY值屬於哪個「group」(並使其明顯在哪裏在分組發生時):

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 
+0

非常感謝回覆 – huddds

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

3

它似乎並不像你需要該組。

SELECT  location, 
      country 
FROM  web_loc_info 
WHERE  flag in ('Y' , 'N') 
AND   available_online = 'Y' 
ORDER BY flag desc, 
      country, 
      location_desc 
2

可以試試這個

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