我正在尝试将我的查询结果分成两组,一组有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
对此的任何帮助都会很棒,所以提前感谢任何回复
答案 0 :(得分: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
答案 1 :(得分: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 :(得分:2)
可以试试这个
SELECT location, country FROM web_loc_info WHERE flag = 'Y' OR flag = 'N' AND
available_online = 'Y' ORDER BY FLAG,country, location_desc
答案 3 :(得分: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
中使用它。