この投稿は、2013-12-19 12:03:34 に setoy によって最終編集されました
次のような、管理者テーブル、部門テーブル、部門に対する管理者の評価テーブルの 3 つのテーブルがあります。
次に、各部門のスコアをクエリしてカウントする必要があります。部門にスコア レコードがない場合でも、クエリ統計の結果は次のように表示されます。
私は mysql ステートメントについて常に漠然としか理解していなかったので、次の段落をつなぎ合わせました:
select <br />
'' as type, <br />
`class`.`name` as cname, <br />
`score`.`cid`, <br />
`score`.`uid`, <br />
`user`.`name` as uname,<br />
`score`<br />
from `score`<br />
right join `class` on `score`.`cid` = `class`.`cid`<br />
left join `user` on `score`.`uid` = `user`.`uid`<br />
<br />
union all(<br />
select <br />
'汇总', <br />
`c`.`cname`, <br />
`c`.`cid`, <br />
`c`.`uid`, <br />
count(`cid`) as uname,<br />
sum(`score`) as score<br />
from (<br />
select <br />
'' as type, <br />
`class`.`name` as cname, <br />
`score`.`cid`, <br />
`score`.`uid`, <br />
`user`.`name` as uname,<br />
`score`<br />
from `score`<br />
right join `class` on `score`.`cid` = `class`.`cid`<br />
left join `user` on `score`.`uid` = `user`.`uid`<br />
) c group by `cname`<br />
)<br />
<br />
order by `cname` asc, `type` asc;
この SQL ステートメントは複雑すぎるようです。このステートメントは簡略化できますか?さらに、クエリ効率の観点から最適化することはできますか?
テーブル構造、データ、コードはすべてここにあります: http://sqlfiddle.com/#!2/6f5db6/10
助けて見てください