簡體   English   中英

MySQL替代子查詢/聯接

[英]MySQL alternative to subquery/join

我正在為此查詢尋找一種有效的替代子查詢/聯接的方法。 假設我有一個表,其中存儲有關公司的信息,其中包含以下列:

  • 名稱:公司名稱
  • 州:公司所在的州
  • 收入:公司的年收入
  • 員工:這家公司有多少員工
  • active_business:公司是否營業(1 =是,0 =否)

假設從此表中,我想找出每個州有多少公司滿足最低收入要求,還有多少公司達到最低雇員人數要求。 這可以表示為以下子查詢(也可以寫為aa join):

SELECT state,
       (
            SELECT count(*)
            FROM records AS a
            WHERE a.state = records.state
              AND a.revenue > 1000000
       ) AS companies_with_min_revenue,
       (
            SELECT count(*)
            FROM records AS a
            WHERE a.state = records.state
              AND a.employees > 10
       ) AS companies_with_min_employees
FROM records
WHERE active_business = 1
GROUP BY state

我的問題是這個。 我可以在沒有子查詢或聯接的情況下執行此操作嗎? 由於查詢已經在每行上進行了迭代(沒有索引),因此我可以通過某種方式添加條件:如果該行滿足最低收入要求並且處於相同狀態,它將為查詢增加某種計數器(類似於map / reduce)?

我認為CASESUM將解決它:

SELECT state
    , SUM(CASE WHEN R.revenue > 1000000 THEN 1 ELSE 0 END) AS companies_with_min_revenue
    , SUM(CASE WHEN R.employees > 10 THEN 1 ELSE 0 END) AS companies_with_min_employees
    FROM records R
    WHERE R.active_business = 1
    GROUP BY R.state

如您所見,每個記錄的值將為1 ,並且收入大於1000000 (否則為0),那么我們將得出總和。 另一列也是如此。

感謝這個StackOverflow問題。 當您在Google中搜索“ sql條件計數”時,會發現此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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