0

これが私のSQLフィドルですhttp://sqlfiddle.com/#!2/9e6691/3

[Quater 1:01] [Quater 2:04] [Quater 3:07] [Quater 4:10]

私は別々のプロジェクトのチャートを作成しているGoogleチャートに取り組んでいます。チャートはその中の2本の線で構成されています。1行で、そのプロジェクトのratepersquarefeetについて説明します。他の行は、クォーターと共通の場所に関する平均値を取得したいと考えています。

コーディングは次のとおりです。

CREATE TABLE IF NOT EXISTS `ratepersqft` (
  `price_id` int(11) NOT NULL auto_increment,
  `project_id` int(11) default NULL,
  `date` varchar(255) default NULL,
  `rate_per_sqft` double default NULL,
  `common_location` varchar(255) default NULL,
  PRIMARY KEY  (`price_id`));

INSERT INTO `ratepersqft` (`price_id`, `project_id`, `date`, `rate_per_sqft`, `common_location`) VALUES
    (1, 26, '2012-01-17 ', 2800, 'ECR'),
    (2, 54, '2012-04-17 ', 1550, 'ECR'),
    (3, 53, '2012-07-17 ', 1850, 'ECR'),
    (4, 58, '2012-10-17 ', 4425, 'ECR'),
    (5, 85, '2012-01-17 ', 0, 'ECR'),
    (6, 114, '2012-04-17 ', 2650, 'ECR'),
    (7, 131, '2012-07-17 ', 2400, 'ECR'),
    (8, 134, '2012-10-17 ', 2900, 'ECR'),
    (9, 140, '2012-01-17 ', 2500, 'ECR'),
    (10, 368, '2012-04-17 ', 1650, 'ECR'),
    (11, 369, '2012-07-17 ', 1800, 'ECR'),
    (12, 370, '2012-10-17 ', 2000, 'ECR'),
    (13, 26, '2012-04-17 ', 2800, 'ECR'),
    (14, 26, '2012-07-17 ', 2800, 'ECR'),
    (15, 26, '2012-10-17 ', 2800, 'ECR');

たとえば。フィドルでは、プロジェクトID26をECRの一般的な場所に配置しました

チャートの最初の線は、そのプロジェクトのratepersquarefeetに関して表示されます。共通の場所としてECRを持っている他のいくつかのプロジェクトがあります。上記の日付に関するこれらのプロジェクトの平均値を計算する必要があります。

たとえば price_id:1,5,9平方フィートあたりのレートは2800,0,2500です。第1クォーターの平均は1766です。同様に、クォーターごとに計算する必要があります。

4

3 に答える 3

2
SELECT ROUND(avg(rate_per_sqft)) as RatePerSqFt 
  FROM ratepersqft
 WHERE common_location = 'ECR' AND
       1 <= MONTH(date) AND MONTH(date) <3  
       group by common_location
UNION
SELECT ROUND(avg(rate_per_sqft)) as RatePerSqFt 
  FROM ratepersqft
 WHERE common_location = 'ECR' AND
       3 <= MONTH(date) AND MONTH(date)<6  
       group by common_location
UNION
SELECT ROUND(avg(rate_per_sqft)) as RatePerSqFt 
  FROM ratepersqft
 WHERE common_location = 'ECR' AND
       6 <= MONTH(date) AND MONTH(date)<9  
       group by common_location
UNION
SELECT ROUND(avg(rate_per_sqft)) as RatePerSqFt 
  FROM ratepersqft
 WHERE common_location = 'ECR' AND
       9 <= MONTH(date) AND MONTH(date)<=12
       group by common_location;  
于 2013-01-31T13:05:28.817 に答える
1

受け入れられた答えは、これを言う複雑な方法ではありません:

SELECT QUARTER(date) dt
     , common_location
     , ROUND(avg(rate_per_sqft)) as RatePerSqFt 
  FROM ratepersqft
 GROUP 
    BY dt
     , common_location  ;

于 2013-01-31T12:56:34.373 に答える
1

これを行うには、副選択で四半期/場所ごとの平均を計算してから、テーブルに対して再度結合します。

これは私が思いついたクエリです:

select * 
from ratepersqft r
join (
    SELECT 
      quarter(`date`) as quarter, 
      year(`date`) as year, 
      avg(rate_per_sqft) as QuarterAverage,
      common_location
    FROM ratepersqft
    group by 
      quarter(`date`), 
      year(`date`),
      common_location
  ) averages
  on year(r.`date`) = averages.year
  and quarter(r.`date`) = averages.quarter
  and r.common_location = averages.common_location

WHERE project_id = 26

SQLフィドル:http ://sqlfiddle.com/#!2 / 9e6691 / 23

于 2013-01-31T12:57:36.663 に答える