sql
1select (select count(*)+1 from (select usf_sid, count(*) as ct from usfavo group by usf_sid) as t1 where t1.ct > t2.ct ) as rank from (select usf_sid, count(*) as ct from usfavo group by usf_sid) as t2 where usf_sid=1
現在このようなクエリを実行しております。
内容は、usfavoテーブルをusf_sidでグループ化しその数をカウントします。
その中で usf_sid=1 のものが上位何番目にあたるかを一度のクエリで取得しています。
上記のクエリは正常に動作しますが、問題なのは、
(select usf_sid, count(*) as ct from usfavo group by usf_sid)
このサブクエリですが、select句とfrom句に同じものを2度記述しています。
これをスマートに一回のサブクエリの記述にまとめたいです。
with句は試してみたのですが、mysqlのバージョンが5.7な為か、使用できませんでした。
その他の方法も探してみたのですが、明確な答えが出せなかった為質問させていただきました。
お分かりの方がおられましたらご教示いただけないでしょうか。
よろしくお願いいたします。
sql
1select count(*)+1 2from (select usf_sid, count(*) as ct1 from usfavo group by usf_sid) t1 3where ct1 > (select count(*) from usfavo where usf_sid=1)
こちらのコードで解決いたしました。
ご回答いただいた皆様、ありがとうございます。
ご指摘いただいた点など参考にさせていただき、勉強してきます。
回答2件
あなたの回答
tips
プレビュー