首先,我已经做了很多搜索,看看这个问题是否可以解决,但尚未找到相关的答案,所以我现在就问。我有一个查询(主要是)从两个单独的表中提取数据,以显示四个位置中每个位置的电脑型号总数(这些位置位于一列中,因此我尝试通过以下方式选择它们作为自己的列别名)。该查询提取了所有必需的信息,但并不像我希望的那样。
期望:
model | loc1 | loc2 | loc3 | loc4
5530 | 3 | 2 | 1 | 0
6440 | 10 | 0 | 3 | 20
现实:
model | loc1 | loc2 | loc3 | loc4
5530 | 3 | null | null | null
5530 | null | 2 | null | null
5530 | null | null | 1 | null
等等..
这是我的查询,如果可能的话,任何帮助使现实符合预期的帮助将不胜感激。
SELECT
a.model,
(select COUNT(a.model)
WHERE a.location = 'AoC-Reno') AS Reno,
(select count(a.model)
where a.location = 'AoC-Fargo') AS Fargo,
(select count(a.model)
where a.location = 'EoC') AS EoC,
(select count(a.model)
where a.location = 'APoC') as APoC
FROM assets AS a
join models m on m.model = a.model
WHERE m.type IN ('Desktop','Laptop')
AND a.model = m.model
AND a.status != 'Recycled'
GROUP BY m.model, a.location
ORDER BY m.model
最佳答案
使用条件聚合:
SELECT a.model,
SUM(a.location = 'AoC-Reno') AS Reno,
SUM(a.location = 'AoC-Fargo') AS Fargo,
SUM(a.location = 'EoC') AS EoC,
SUM(a.location = 'APoC') as APoC
FROM models m JOIN
assets a
on m.model = a.model
WHERE m.type IN ('Desktop', 'Laptop') and a.status <> 'Recycled'
GROUP BY m.model
ORDER BY m.model;
您的查询有多个问题:
- 您正在使用“子查询”,但没有
FROM
子句。 - 您正在按
模型
和位置
进行聚合,但您只需要每个模型
一行。 JOIN
条件既位于ON
子句中,又在WHERE
子句中重复。
关于mySQL 查询选择/连接未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43151208/