簡體   English   中英

SELECT子句中的MySQL相關子查詢

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM