我正在使用Oracle数据库,并希望计算不同地区的平均产品价格。
示例:
prod,amt,price
X,100,1
X,180,2
X,250,3
Y,90,2
Y,170,3
Y,280,3
这里的产品X在一个地区的售价为100,而在另一个地区的售价为180。
现在,对于某些分析,它们被分为不同的重叠的范围,我需要根据范围计算价格平均值
必需的输出是
prod,rang(Amt),mean(price),
X,[0-200],1.5,
X,[150-300],2.5,
Y,[0-200],2.5,
Y,[150-300],3,
请注意,范围很多,为清楚起见,我只给出了2个。
我尝试如下进行操作,但是case
匹配第一个条件,并且只为[0-200]给出了一个X值,我需要2个记录
select prod, amt, price,
case
when amt between 0 and 200 then amt
when amt between 150 and 300 then amt
end as rng
from tablea
如何在case语句中获取2条匹配记录?
答案 0 :(得分:2)
您可以使用 public function up()
{
Schema::create('companies', function (Blueprint $table) {
$table->increments('id');
$table->string('company_name');
$table->integer('loan_amount');
$table->float('interest_rate');
$table->integer('maximum_time_period');
$table->float('monthly_rental');
$table->timestamps();
});
,然后将conditional aggregation
用作
unpivot
答案 1 :(得分:1)
使用单个条件进行两个查询并将它们合并。这不是一个完美的解决方案,但是会起作用。
SELECT prod, '0-200' rang, AVG( price )
FROM table_name
WHERE amt BETWEEN 0 AND 200
GROUP BY prod
UNION ALL
SELECT prod, '150-300' rang, AVG( price )
FROM table_name
WHERE amt BETWEEN 150 AND 300
GROUP BY prod