1

開始文字に基づいて列をグループ化し、それぞれの文字で始まる数を数えます。これはかなり簡単ですが、私の質問は、同じことを何度も書く必要がないように、列に名前を設定するにはどうすればよいですか?

これが私のコードです:

SELECT substr(p_nev,1,1) firstLetter, count(substr(p_nev,1,1))
from pizza
group by substr(p_nev,1,1)
order by substr(p_nev,1,1) desc;

substr(p_nev,1,1) を 4 回記述しなければならなかったことに注意してください。そのため、何らかの形で firstLetter (または何らかの変数名) に置き換えたいと考えています。

それで、これはそれを行うための最もエレガントな方法ですか?

SELECT substr(p_nev,1,1) firstLetter, count(*)
from pizza
group by substr(p_nev,1,1)
order by firstLetter desc;
4

3 に答える 3

2

内部選択でクエリをラップできます

select fl, count(*) 
  from (select substr(p_nev,1,1) fl
          from pizza) 
group by fl
order by fl desc;

私の実践では、オプティマイザは常に実行計画に関してこれらのクエリを同等にするのに十分なほど巧妙でした

于 2013-11-02T21:02:42.627 に答える
1

count(*)の代わりにcount(substr(p_nev,1,1))とのorder by firstLetter代わりに使用できるはずですorder by substr(p_nev,1,1)group byただし、選択リストのエイリアシングはクエリがグループ化された後に発生するため、句を綴る必要があります。

于 2013-11-02T20:55:41.053 に答える