0

私は MySQL の初心者で、やろうとしていることについて助けが必要です。私は 3 つのテーブルを持ってeod-stockcompanyますshare_percentagecompanyテーブルには、証券取引所によって割り当てられたコードを持つ、証券取引所に上場している会社のすべてのデータが含まれています。eod_stockには、1 日の毎分のトランザクションのデータがあり、同じ company_code フィールドもあります。share_percentage株式数などのデータがあります。私がしたいことは、以下の手順で要約されています。

ステップ 1 : テーブルの company_code フィールドをeod_stockテーブルの code フィールドと一致させcompanyます。フィールドの値は同じです (会社に割り当てられたコードネーム)。

ステップ 2 : フィールドに従って並べ替えますsector_id。このフィールドはcompanyテーブルにあります。セクターにはすべて固有の異なる ID があり、その下に企業があります (カテゴリー-サブカテゴリーのようなものです。セクター ID はカテゴリーであり、特定のセクターに属する企業はその下に入ります)。

ステップ 3 : ステップ 2 の会社をlast_trade_price(eod_stock表の) フィールドとdatetime(最後)に従って並べ替えます

ステップ 4share_percentage : company_code フィールドごとにテーブルの no_of_shares を持つ会社を照合します

ステップ 5step3 :乗算 step4

ステップ 6 : ステップ 5 の合計 (セクター別の企業の合計。たとえば、すべての銀行の合計)

ステップ7step 5:除算step 6

ステップ 8 : セクターごとのステップ 7 の合計 (例: すべての銀行) = 結果

私の説明が十分に詳細であることを願っています.これを機能させることはできません. どんな助けでも大歓迎です。前もって感謝します!

テーブルのサンプルと私が欲しいもの:

TABLE company:

code: "google", "HSBC", "yahoo", "SCB"
sector_id: "1" ,"2", "1", "2"

TABLE eod_stock:
company_code : "google", "HSBC", "yahoo", "SCB"
ltp: "110", "115.2", "122.4", 105"
datetime: "1/1/2014 11:00", "1/1/2014 11:00", "1/1/2014 11:00", "1/1/2014 11:00"

company_code : "google", "HSBC", "yahoo", "SCB"
ltp: "112", "108.2", "112.4", 105.80"
datetime: "1/1/2014 11:01", "1/1/2014 11:01", "1/1/2014 11:01", "1/1/2014 11:01"

TABLE : share_percentage
company_code: "google", "HSBC", "yahoo", "SCB"
total_share: "12000", "20000", "5000", "18000"

と私のコード:

 SELECT company.sector_id, 
   SUM(eod_stock.ltp * share_percentage.total_share) AS Market_CAP
  FROM company
  INNER JOIN (SELECT max(datetime) as lastTime,company_code
  FROM eod_stock
  GROUP BY company_code) as LAST_TRADE
  ON LAST_TRADE.company_code = company.code
  INNER JOIN eod_stock on eod_stock.datetime = Last_trade.lastTime 
                 and eod_stock.company_code = company.code 
  INNER JOIN share_percentage on share_percentage.company_code = company.code
  GROUP BY company.sector_id;

私は自分のSQLがうまくいかないことを知っていますが、達成したいのは最終結果として8.3のようなものです。操作を中断することでphpでコーディングできることは知っていますが、時間を節約できる場合はSQLから実現したいと考えていました。

4

2 に答える 2

0

結局のところ、セクターごとの時価総額を計算しようとしているようです。その場合、以下のクエリでそれを行う必要があります。

SELECT COMPANY.SECTOR_ID, 
   SUM(eod_stoc.ltp * share_percentage.total_shares) AS Market_CAP
FROM COMPANY
INNER JOIN (
    SELECT max(datetime) lastTime
       ,company_code
    FROM eod_stock
   GROUP BY company_code
) LAST_TRADE
ON Last_trade.company_code = company.company_code
INNER JOIN eod_stock on eod_stock.datetime = Last_trade.lasttime 
                     and eod_stock.company_code = company.company_code 
INNER JOIN share_percentage on share_percentage.company_code = company.company_code
GROUP BY COMPANY.SECTOR_ID;
于 2013-12-31T20:26:22.690 に答える