[英]MySQL correlated sub-query in SELECT clause
我正在尝试在MySQL查询的SELECT
子句中执行相关的子查询。 如何在子查询的WHERE
子句内的另一列中使用行的值?
我一直在参考此网页的“相关子查询示例”部分,但是由于某种原因,我的查询无法正常工作。
这是我的代码:
SELECT Year,
( SELECT COUNT(*)
FROM systems
WHERE SYSTEMTYPE = 'handheld' AND Year = sys.Year
) as handheld,
( SELECT COUNT(*)
FROM systems
WHERE SYSTEMTYPE = 'console' AND Year = sys.Year
) as console,
FROM systems as sys
WHERE Year IS NOT NULL
基本上,我正在尝试创建一个表,该表显示每年为每种类型创建了多少个系统。 当我在MySQL Workbench中运行该查询时,它将一直运行到数据库连接过期为止。 我看不到此查询与我所引用的网站有何不同。
任何帮助将不胜感激! 如果似乎有更好的方法可以解决此问题,那么我也对这些想法持开放态度。 谢谢!
可能是您遇到范围问题,请尝试对每行使用内部联接而不是子查询
SELECT sys.Year, t.my_count
FROM systems as sys
INNER JOIN
( SELECT Year, COUNT(*) my_count
FROM systems
WHERE SYSTEMTYPE = 'handheld' AND Year = sys.Year
GROUP BY year
) t on t.year = sys.year
WHERE sys.Year IS NOT NULL
使用Group By语句而不是子查询。 随着添加更多行,子查询将使您的查询运行慢得多。 尝试以下查询以获取每种类型和每年制造的系统数量:
SELECT
Year,
SYSTEMTYPE,
COUNT(*) as Total_systems_per_type_per_year
FROM systems
WHERE Year IS NOT NULL
GROUP BY Year, SYSTEMTYPE
这可能是查询性能的问题。 此类子查询需要针对每一行执行,因此可能需要很长时间才能运行。 可以使用group by
简化查询:
select year, count(*) from systems
where Year is not null and systemtype = 'handled'
group by Year
有关评论的更新:
如果我想为除一种类型之外的其他类型的系统添加更多列怎么办?
使用查询:
select year,
sum(case when systemtype = 'handled' then 1 else 0 end) handled,
sum(case when systemtype = 'console' then 1 else 0 end) console
from systems
where Year is not null
group by Year
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.