[英]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.