SUM 中的子查询

Subquery in SUM

我正在使用 MySQL 并且我有两个 table。一个具有对值的引用,另一个具有实际值。我想计算 SUM.

物品混乱

+----+--------+----------+---------------------+
| ID | ItemID | MessType | TimeStamp           |
+----+--------+----------+---------------------+
| 1  | 2      | 1        | 2015-04-26 18:53:33 |
+----+--------+----------+---------------------+
| 2  | 2      | 2        | 2015-04-26 18:54:42 |
+----+--------+----------+---------------------+
| 3  | 2      | 1        | 2015-04-26 18:54:49 |
+----+--------+----------+---------------------+
| 4  | 2      | 1        | 2015-04-26 18:55:01 |
+----+--------+----------+---------------------+
| 5  | 2      | 2        | 2015-04-26 18:55:04 |
+----+--------+----------+---------------------+

MessTypes

+------------+--------------+---------------+
| MessTypeID | MessTypeName | MessTypeValue |
+------------+--------------+---------------+
| 1          | Mess Up      | 1             |
+------------+--------------+---------------+
| 2          | Mess Down    | -1            |
+------------+--------------+---------------+

因此,如果您看到,MessTypeID 指的是 MessTypes table 中的值。我想要 updownsum。所以如果我做这样的查询:

SELECT *, (
  SELECT `MessTypeValue` FROM `MessTypes` WHERE `MessTypeID`=`MessType`
) AS `Val` FROM `ItemMess` GROUP BY `ItemID`

我得到这个输出:

+----+--------+----------+---------------------+
| ID | ItemID | MessType | TimeStamp           |
+----+--------+----------+---------------------+
| 1  | 2      | 1        | 2015-04-26 18:53:33 |
+----+--------+----------+---------------------+
| 2  | 2      | 2        | 2015-04-26 18:54:42 |
+----+--------+----------+---------------------+
| 3  | 2      | 1        | 2015-04-26 18:54:49 |
+----+--------+----------+---------------------+
| 4  | 2      | 1        | 2015-04-26 18:55:01 |
+----+--------+----------+---------------------+
| 5  | 2      | 2        | 2015-04-26 18:55:04 |
+----+--------+----------+---------------------+

但如果我给出:

SELECT *, (
  SELECT `MessTypeValue` FROM `MessTypes` WHERE `MessTypeID`=`MessType`
) AS `Val`, SUM(SELECT `MessTypeValue` FROM `Messtypes` WHERE `MessTypeID`=`MessType`) AS `Mess`FROM `ItemMess` GROUP BY `ItemID`

或者

SELECT *, (
  SELECT `MessTypeValue` FROM `MessTypes` WHERE `MessTypeID`=`MessType`
) AS `Val`, SUM(`Val`) AS `Mess`FROM `ItemMess` GROUP BY `ItemID`

我收到以下错误:

Error in query (1064): Syntax error near 'SELECT MessTypeValue FROM messtypes WHERE MessTypeID=MessType) FROM `' at line 1

Error in query (1054): Unknown column 'Val' in 'field list'

我该如何处理。我想要 SUM 的值。有什么办法可以将 12 中的 IDs 替换为它们的原始值吗? ps:我不想为整个事物创建视图或使用 Joins

使用联接:

select im.ItemID, sum(mt.MessTypeValue) as val
from ItemMess im
join MessTypes mt on im.MessTypeID = mt.MessTypeID
group by im.ItemID

没有连接:

select  im.ItemID, (select sum(mt.MessTypeValue) from MessTypes mt where im.MessTypeID = mt.MessTypeID) as val
from ItemMess im
group by im.ItemID

我是不是遗漏了什么,还是您正在寻找这个?

select i.id, sum(messtypevalue) 
  from itemmess i
    inner join messtypes t
      on i.messtype = t.messtypeid
  group by i.itemid;

demo

这将给出以下输出:

ID  |  sum(messtypevalue)
 1  |   1

这应该适合你:

SELECT `i`.`id`,
       Sum(`messtypevalue`)
FROM   `itemmess` AS `i`
       INNER JOIN `messtypes` AS `t`
               ON `i`.`messtype` = `t`.`messtypeid`
GROUP  BY `i`.`itemid`;