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 中的值。我想要 up
和 down
的 sum
。所以如果我做这样的查询:
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
的值。有什么办法可以将 1
和 2
中的 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;
这将给出以下输出:
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`;
我正在使用 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 中的值。我想要 up
和 down
的 sum
。所以如果我做这样的查询:
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
FROMmesstypes
WHEREMessTypeID
=MessType
) FROM `' at line 1
和
Error in query (1054): Unknown column 'Val' in 'field list'
我该如何处理。我想要 SUM
的值。有什么办法可以将 1
和 2
中的 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;
这将给出以下输出:
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`;