I am a MySQL newbie and need help with something I am trying to do. I have 3 tables eod-stock
, company
and share_percentage
. company
table has all data for the companies listed in stock exchange with the codes assigned by the stock exchange. eod_stock
has data of every minute transaction of a day and it also has the same company_code field. share_percentage
has data of number of shares etc. What I want to is summed up below in steps:
step 1: match the company_code field in the eod_stock
table with code field in company
table. the values for the fields are same (assigned codename for a company).
step 2: sort according to field sector_id
. this field is in the company
table. The sectors all have unique different ids and they have companies under them (kind of like category-subcategory. sector id is the category and companies that belong to a specific sector will go under that one )
step 3: sort the companies in step 2 according to last_trade_price
(in eod_stock
table) field and datetime
(last)
step 4: match the companies with no_of_shares from share_percentage
table by company_code field
step 5: multiply step3
with step4
step 6: sum of step 5 (the sum of companies by sector. for example, sum of all banks)
step 7: divide step 5
by step 6
step 8:sum of step 7 by sector(eg : all banks) = result
I hope my explanation is detailed enough.I can't get this to work. any help is much appreciated. Thanks in advance!
table samples and what I want:
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"
and my code:
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;
I know my sql is not ok but what I wan to achieve is something like 8.3 as final result. i know i can code it with php by breaking the operation but wanted to achieve it from sql if its possible to save time.