从多个表中乘以值MySQL

时间:2013-06-19 13:02:07

标签: mysql sql join multiple-tables

我正在使用mySql 5.1。我遇到了麻烦。下面的查询工作正常。我希望使用数据库中的值替换相应的SID的常量值100。但我不知道该怎么做。

INSERT INTO ResultTable(SID,Date,Result) 
    SELECT SID,DATE(`Time`),(MAX(SValue)-MIN(SValue))* 100 
      FROM table1   
  GROUP BY Date(`Time`),SID;


            Table 1
------------------------------------------
SID         Time                SValue
------------------------------------------
7       2013-05-06 12:06:17     5668
8       2013-04-10 16:17:49     11434.9
8       2013-04-10 16:18:54     11435.5
7       2013-04-10 16:21:04     11436.8
7       2013-04-10 16:22:09     11437.4
8       2013-04-10 16:25:24     11439.2


    Table2
---------------------
SID     EValue
---------------------
7            10
8            100


        Result Table
------------------------------------------
SID     Date                Result
------------------------------------------
7       2013-05-06               56680
8       2013-04-10               1143490
8       2013-04-10               1143550
7       2013-04-10               114368
7       2013-04-10               114374
8       2013-04-10               1143920

现有查询:

    SELECT SID,DATE(`Time`),(MAX(SValue)-MIN(SValue))* 100 
      FROM table1   
  GROUP BY Date(`Time`),SID;

我的查询:

      select (h1.EValue * ss.SValue) AS Emission 
        from Table2 h1 
  inner join (
       select SID, (MAX(SValue)-MIN(SValue)) AS SValue 
         from Table1 
     group by Date(`Time`), SID
      ) ss on h1.SID = ss.SID

但我的查询提供了一些额外的值。我的问题是

  1. 我在这里做错了什么?

  2. 为什么会有额外的价值?

  3. 有没有更好的方法呢?

  4. 任何帮助将不胜感激..

2 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西。我只是加入table2并从那里获得EValue并替换了100.

SELECT  h1.SID, DATE(`Tm`), 
        (MAX(SValue)-MIN(SValue))* ss.EValue 

FROM    table1 as h1

        JOIN table2 as ss
        ON h1.SID = ss.SID

GROUP BY Date(`Tm`), h1.SID;

我认为您获得“额外”值的原因是因为您在子查询中按日期和SID进行分组,但您没有在主查询中显示日期。因此,对于具有不同日期的SID,您将获得多个结果。

答案 1 :(得分:1)

这样做会返回预期的结果(我没有测试就输入了 - 所以这可能是一些错别字 - 对我感到羞耻)?

    SELECT T1.SID,DATE(T1.`Time`),(MAX(T1.SValue)-MIN(T1.SValue))* T2.EValue
        FROM table1 AS T1, Table2 AS T2
        WHERE T1.SID = T2.SID
        GROUP BY Date(T1.`Time`),T1.SID;