0

情報を取得しようとしているテーブルが 2 つあります。

ログイン テーブル - 従業員のリストを含む

プロジェクト テーブル - プロジェクトを含む

つまり、コピーライターを選択し、それぞれに対して「open_projects」と呼ばれるフィールドを返すサブクエリを実行するクエリを作成しようとしています。これで、以下の sql で作業を開始できます。

select web_login_id,
                (select count(project_web_id) from project
                where copywriter = web_login_id
                and (`status` = 'open' or `status` = 'qual')) as open_projects from login
                where roles like '%copywriter%'
                and tierLevel like '%c1%'
                order by open_projects asc

これは次のようなものを返します。

1982983 3

1982690 22

2987398 5

これに関する問題は、プロジェクトの 5 つまたは 6 つが同じクライアントに属し、キューのような方法で処理されるため、実際には作業されていない場合があることです。

私の質問は、サブクエリがclient_login_idフィールドに基づいてサブセットをグループ化するように上記のSQLを変更する方法です。

このSQLは私に次のエラーを与えます:サブクエリは複数の行を返します

select web_login_id,
                (select count(project_web_id) from project
                where copywriter = web_login_id
                and (`status` = 'open' or `status` = 'qual') group by client_login_id) as open_projects from login
                where roles like '%copywriter%'
                and tierLevel like '%c1%'
                order by open_projects asc
4

1 に答える 1

0

これを明示的な結合と言い換える必要があります。私は次のトリックを行うと思います:

select web_login_id, cw.open_projects
from login l left outer join
      (select copywriter, count(project_web_id) as open_projects
       from project
       where `status`  in ('open', 'qual')
       group by copywriter
      ) cw
      on l.web_login_id = cw.copywriter
where l.roles like '%copywriter%' and l.tierLevel like '%c1%' 
order by open_projects asc 

「client_login_idによるグループ」が何をしているのかわかりません。必要ないようです。

これが完了したら、サブクエリから好きなだけ列を返すことができます。

于 2012-06-21T17:38:14.020 に答える