Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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

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 - Fatal编程技术网

Sql 通过更改(按分区)结果集上的计数()进行排序

Sql 通过更改(按分区)结果集上的计数()进行排序,sql,oracle,Sql,Oracle,我试图统计在某些地点每天发生的一些交易类型。例如,如果我有两种不同类型的交易x,y和一个日期和一个地点(NY),我试图查看该日期和该地点发生了多少x交易,发生了多少y交易,以及总计。看起来不错,但是当我使用order by date desc时,结果会发生变化,相同日期的所有位置都有相同的计数。有人能解释一下为什么会发生这种事吗。 对于不同的地点和相同的日期,我得到了相同的计数 我使用了下面的逻辑 select location, trunc(date), count(locati

我试图统计在某些地点每天发生的一些交易类型。例如,如果我有两种不同类型的交易x,y和一个日期和一个地点(NY),我试图查看该日期和该地点发生了多少x交易,发生了多少y交易,以及总计。看起来不错,但是当我使用order by date desc时,结果会发生变化,相同日期的所有位置都有相同的计数。有人能解释一下为什么会发生这种事吗。 对于不同的地点和相同的日期,我得到了相同的计数

我使用了下面的逻辑

select location, trunc(date),
       count(location) over (partition by date) as grand_total 
from table
where transaction_types in (x,y)
ORDER BY DATE DESC
预期结果应为:

locaton       date         grandtotal
NY          1/1/2019          5
NJ          1/1/2019          7
实际的

LOCATION     DATE         GRANDTOTAL
NY          1/1/2019        5
NJ          1/1/2019        5

对于不同的位置和相同的日期,我得到的计数是相同的。

只需在分区中添加位置,因为您希望每个位置都有datewise,而不仅仅是datewise,因此分区应该使用包含日期的位置

     select location, trunc(date), 
     count(location) 
    over (partition by location, date) as 
    grand_total 
    from table where transaction_types in 
    (x,y)
ORDER BY DATE DESC

我认为以下使用
groupby
和条件
aggregate
函数的查询将解决您的问题:

select location, 
trunc(date), 
Sum(case when transaction_types = 'x' then 1 end) as x_total,
Sum(case when transaction_types = 'y' then 1 end) as y_total,
count(1) as total
from table where transaction_types in (x,y)
group by location,trunc(date);

干杯

发布一些源数据会有帮助。如果按日期划分
,则无论外部查询中的任何
顺序,每个日期都应得到相同的结果。我的猜测是,如果您在查询中实际需要一个分析函数,而不是一个带有
groupby
的聚合函数,那么您需要
count(*)over(按位置划分)
。如果您需要TRUNC(DATE),这意味着DATE(列的可怕名称,因为它是Oracle中数据类型的名称)具有时间组件。如果要计算给定日期的所有事务,则应按TRUNC(日期)划分,而不是按日期划分。然后:如果你想按地点计算交易,为什么要计算地点?位置应与TRUNC(日期)一起位于分区中。计数应为事务数,并以事务类型为条件:
count(当事务类型='x'然后1结束时的情况)超过…..
I将nvl添加到各个事务计数中,在没有事务的情况下放入0,并留空。再次感谢。如果
location
也包含空值,则结果将不同。