Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拾取SQL中的任何元素";分组方式;_Sql_Oracle_Group By - Fatal编程技术网

拾取SQL中的任何元素";分组方式;

拾取SQL中的任何元素";分组方式;,sql,oracle,group-by,Sql,Oracle,Group By,我有行程的航班记录,并保证所选行程的所有价格均以相同货币计价 通过groupbyquery,我得到行程价格的总计sum: select ITINERARY_ID, sum(PRICE) from FLIGHT group by ITINERARY_ID; 我如何选择货币(对于给定的行程_ID),它们都是相同的) 我以min/max结束: select ITINERARY_ID, sum(PRICE), max(CURRENCY) from FLIGHT group by ITINERARY_I

我有行程的航班记录,并保证所选行程的所有价格均以相同货币计价

通过
groupby
query,我得到行程价格的总计
sum

select ITINERARY_ID, sum(PRICE) from FLIGHT group by ITINERARY_ID;
我如何选择货币(对于给定的
行程_ID
),它们都是相同的)

我以
min
/
max
结束:

select ITINERARY_ID, sum(PRICE), max(CURRENCY) from FLIGHT group by ITINERARY_ID;
但是,如果我只想挑选任何元素(它们都是相同的),那么对
货币进行排序是不明智的


min
/
max
是否只是可能的解决方案?可以提高查询性能吗?

您可以在
组中包含
货币

select ITINERARY_ID, currency, sum(PRICE)
from FLIGHT
group by ITINERARY_ID, currency;
或使用聚合函数:

select ITINERARY_ID, MAX(currency) as currency, sum(PRICE)
from FLIGHT
group by ITINERARY_ID;
如果货币确实相同,那么它们产生的结果是相同的

(对于给定的行程,它们都是相同的)

您不需要对其进行聚合,您可以将查询编写为

select  ITINERARY_ID, CURRENCY, sum(PRICE)
from    FLIGHT
group by ITINERARY_ID, CURRENCY

真正的解决方案是表格设计。你说保证一个行程的所有价格都是同一种货币。但是您存储每个航班的货币,这在技术上允许在行程中使用不同的货币

将货币与行程一起存储,并进行相应查询:

select i.itinerary_id, f.total_price, i.currency
from itinerary i
join 
(
  select itinerary_id, sum(price) as total_price
  from flight
  group by itinerary_id
) f on f.itinerary_id = i.itinerary_id;

您使用什么数据库引擎?Oracle,但它落后于Hibernate ORM。窗口功能可以解决我的问题吗?
groupby
在两个字段上的性能与
groupby
在一个字段上的性能相同+
max
在第二个字段上的性能相同,不是吗?是的,我想性能是相同的。在这个意义上,我认为没有太多的空间来优化这样一个简单的查询,但是,你可以考虑使用索引,你的第二个查询是否有错?您在应用聚合函数的同一元素上分组…@gavenkoa。非常感谢。第二种情况下,
GROUP BY
子句不应包含该列。