MySQL查询中的查询语法错误
这是我的疑问:MySQL查询中的查询语法错误,mysql,sql,mysql-error-1064,Mysql,Sql,Mysql Error 1064,这是我的疑问: SELECT `i`.`itemtype` AS `Item`, `p`.`name` (SELECT SUM(`i`.`count`) AS `Count` WHERE `itemtype` = 2148), (SELECT SUM(`i`.`count`) * 100 AS `Count1` WHERE `itemtype` = 2152), (SELECT SUM(`i`.`count`) * 10000 AS `Count2` WHERE `
SELECT
`i`.`itemtype` AS `Item`,
`p`.`name`
(SELECT SUM(`i`.`count`) AS `Count` WHERE `itemtype` = 2148),
(SELECT SUM(`i`.`count`) * 100 AS `Count1` WHERE `itemtype` = 2152),
(SELECT SUM(`i`.`count`) * 10000 AS `Count2` WHERE `itemtype` = 2160)
FROM `player_items` AS `i`
LEFT JOIN `players` AS `p` ON (`p`.`id` = `i`.`player_id`)
WHERE `i`.`itemtype` IN (2148, 2152, 2160)
GROUP BY `i`.`itemtype`
LIMIT 0, 30
当我在mysql中运行上述查询时,我得到以下错误消息:
#1064 - You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
'SELECT SUM(`i`.`count`) AS `Count` WHERE `itemtype` = 2148)
, (SELECT SUM(`i`' at line 4
我完全不明白这意味着什么,因为我是MySQL中的乞丐。在你所有的选择中。。。在所有选择的总和中,您没有将FROM player_项目定义为i。。。您没有将FROM player_项目定义为i故障:-
SELECT SUM(`i`.`count`) AS `Count` <-- missing FROM which table
故障:-
SELECT SUM(`i`.`count`) AS `Count` <-- missing FROM which table
此列后缺少逗号:
`p`.`name`
请考虑以下查询:
SELECT i.itemtype AS Item
, p.name
, SUM(CASE
WHEN itemtype = 2148 THEN i.count
ELSE 0
END) AS Count
, SUM(CASE
WHEN itemtype = 2152 THEN i.count
ELSE 0
END) * 100 AS Count1
, SUM(CASE
WHEN itemtype = 2160 THEN i.count
ELSE 0
END) * 10000 AS Count2
FROM player_items AS i
LEFT JOIN players AS p ON i.player_id = p.id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY i.itemtype ASC
LIMIT 0, 30
要将这三列相加,您可以:
SELECT t.itemType AS Item, t.Count, t.Count1, t.Count2
, SUM(t.Count1, t.Count2, t.Count3) AS Total
FROM
(
SELECT i.itemtype AS Item
, p.name
, SUM(CASE
WHEN itemtype = 2148 THEN i.count
ELSE 0
END) AS Count
, SUM(CASE
WHEN itemtype = 2152 THEN i.count
ELSE 0
END) * 100 AS Count1
, SUM(CASE
WHEN itemtype = 2160 THEN i.count
ELSE 0
END) * 10000 AS Count2
FROM player_items AS i
LEFT JOIN players AS p ON i.player_id = p.id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY i.itemtype ASC
LIMIT 0, 30
) AS t
或者你可以再加一个例子
这使得您无需运行另外三条SELECT语句来返回相同的结果。此列后缺少逗号:
`p`.`name`
请考虑以下查询:
SELECT i.itemtype AS Item
, p.name
, SUM(CASE
WHEN itemtype = 2148 THEN i.count
ELSE 0
END) AS Count
, SUM(CASE
WHEN itemtype = 2152 THEN i.count
ELSE 0
END) * 100 AS Count1
, SUM(CASE
WHEN itemtype = 2160 THEN i.count
ELSE 0
END) * 10000 AS Count2
FROM player_items AS i
LEFT JOIN players AS p ON i.player_id = p.id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY i.itemtype ASC
LIMIT 0, 30
要将这三列相加,您可以:
SELECT t.itemType AS Item, t.Count, t.Count1, t.Count2
, SUM(t.Count1, t.Count2, t.Count3) AS Total
FROM
(
SELECT i.itemtype AS Item
, p.name
, SUM(CASE
WHEN itemtype = 2148 THEN i.count
ELSE 0
END) AS Count
, SUM(CASE
WHEN itemtype = 2152 THEN i.count
ELSE 0
END) * 100 AS Count1
, SUM(CASE
WHEN itemtype = 2160 THEN i.count
ELSE 0
END) * 10000 AS Count2
FROM player_items AS i
LEFT JOIN players AS p ON i.player_id = p.id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY i.itemtype ASC
LIMIT 0, 30
) AS t
或者你可以再加一个例子
这使得您无需运行另外三条SELECT语句来返回相同的结果。我想您需要这样的结果:
SELECT p.name
,i.itemtype
,CASE itemtype
WHEN 2148 THEN count(*)
WHEN 2152 THEN count(*) * 100
WHEN 2160 THEN count(*) * 10000
END AS ct
FROM players p
LEFT JOIN player_items i ON p.id = i.player_id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY p.name, i.itemtype
ORDER BY p.name, i.itemtype
LIMIT 30;
或者,也许是这样:
SELECT p.name
,sum(CASE WHEN itemtype = 2148 THEN 1 ELSE 0 END) AS ct
,sum(CASE WHEN itemtype = 2152 THEN 1 ELSE 0 END) * 100 AS ct1
,sum(CASE WHEN itemtype = 2160 THEN 1 ELSE 0 END) * 10000 AS ct2
FROM players p
LEFT JOIN player_items i ON p.id = i.player_id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY p.name
ORDER BY p.name
LIMIT 30;
请看。我想您想要这样的东西:
SELECT p.name
,i.itemtype
,CASE itemtype
WHEN 2148 THEN count(*)
WHEN 2152 THEN count(*) * 100
WHEN 2160 THEN count(*) * 10000
END AS ct
FROM players p
LEFT JOIN player_items i ON p.id = i.player_id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY p.name, i.itemtype
ORDER BY p.name, i.itemtype
LIMIT 30;
或者,也许是这样:
SELECT p.name
,sum(CASE WHEN itemtype = 2148 THEN 1 ELSE 0 END) AS ct
,sum(CASE WHEN itemtype = 2152 THEN 1 ELSE 0 END) * 100 AS ct1
,sum(CASE WHEN itemtype = 2160 THEN 1 ELSE 0 END) * 10000 AS ct2
FROM players p
LEFT JOIN player_items i ON p.id = i.player_id
WHERE i.itemtype IN (2148, 2152, 2160)
GROUP BY p.name
ORDER BY p.name
LIMIT 30;
请参阅。感谢您提供了一个好的解决方案。顺便说一句。是否可以将另一行的Count、Count1和Count2相加?@Cyclone我已经更新了我的答案,以解决您评论中的问题。谢谢您提供了一个好的解决方案。顺便说一句,是否可以将另一行的Count、Count1和Count2相加?我已经更新了我的答案,以解决您评论中的问题。