MySQL多表关系查询

MySQL多表关系查询,mysql,sql,table-relationships,Mysql,Sql,Table Relationships,我是一个MySQL新手,我想做的事情需要帮助。我有三个表eod stock,company和share\u percentage公司表包含证券交易所上市公司的所有数据,代码由证券交易所指定eod_股票包含一天中每分钟交易的数据,并且它还具有相同的公司代码字段share\u percentage包含股票数量等数据。我想分步骤总结如下: 步骤1:将eod\U库存表中的公司代码字段与公司表中的代码字段匹配。字段的值相同(为公司指定了代码名) 步骤2:根据字段扇区id进行排序。此字段位于公司表中。所有部

我是一个MySQL新手,我想做的事情需要帮助。我有三个表
eod stock
company
share\u percentage
<代码>公司表包含证券交易所上市公司的所有数据,代码由证券交易所指定<代码>eod_股票包含一天中每分钟交易的数据,并且它还具有相同的公司代码字段
share\u percentage
包含股票数量等数据。我想分步骤总结如下:

步骤1:将
eod\U库存
表中的公司代码字段与
公司
表中的代码字段匹配。字段的值相同(为公司指定了代码名)

步骤2:根据字段
扇区id
进行排序。此字段位于
公司
表中。所有部门都有唯一的不同id,并且它们下面都有公司(类似于类别子类别。部门id是类别,属于特定部门的公司将归入该类别)

步骤3:根据
上次交易价格
(在
eod\U股票
表中)字段和
日期时间
(上次)对步骤2中的公司进行排序

步骤4:按公司代码字段匹配
股份百分比表中无股份的公司

步骤5:将
步骤3
步骤4相乘

步骤6:步骤5的总和(按部门划分的公司总数。例如,所有银行的总和)

步骤7:将
步骤5
除以
步骤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来实现它。

看起来您正在试图计算每天结束时每个部门的市值。如果是这样的话,下面的查询应该可以做到这一点

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;

使用这个,更快更简单

您需要表明您已经为此付出了一些努力,我们不是来为您编写代码的。将X与Y匹配意味着您应该编写一个
连接
。当您想使用上一步的结果在一个步骤中执行某些操作时,这可能意味着使用子查询。排序的意思是按
排序。我现在只是在写代码……不小心按下post按钮……等待代码在另一个注释中,您最好描述您拥有的数据和您想要的结果,而不是像这里所做的那样给出一个逐步列表。这可能是因为您考虑的步骤不会导致您想要的结果,而SQL不是命令式语言,在任何情况下都不适合“做这个,然后做那个”的概念;给出表示源代码的模式和示例数据,以及对预期结果的精确描述,有助于具有领域专业知识的人向您提供有用的建议:on子句中的未知列“Last_trade.lastTime”您能告诉我有什么问题吗?lastTime with capitalizationdagfr您可以在我的代码中看到我已经做了更改。获取此错误`error 1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在'p'附近使用的正确语法,(从eod_stock s INNER JOIN中选择s.company_代码,s.ltp('在第2行,感谢您的帮助,thoughERROR 1054(42S22)):on子句中的未知列“last.datetime”仍然存在此错误我真的很抱歉不了解last.datetime的工作原理是的,它给出了一些结果不确定其是否有效,但您能告诉我您所说的库存。ltp吗?这是上次交易eod_库存的ltp
SELECT company.sector_id, sum(stock.ltp*share_percentage.total_shares)
FROM company, share_percentage, (
    SELECT eod_stock.company_code, eod_stock.ltp 
    FROM eod_stock
    INNER JOIN (
        select eod_stock.company_code, max(datetime) last 
        from eod_stock
        group by eod_stock.company_code
    ) as last
    on (eod_stock.company_code = last.company_code and eod_stock.datetime = last.last )
) as stock
WHERE company.code = stock.company_code and company.code=share_percentage.company_code