2015-12-05 14 views
5

私はMySQLとデータベースが初めてで、MySQLのSELECTのFROMフィールドでサブクエリを使用するのは良いプログラミング方法とは考えられていませんMySQLのFROMフィールドからサブクエリを削除する方法

select userid, avg(num_pages) 
from (select userid , pageid , regid , count(regid) as num_pages 
     from reg_pag 
     where ativa = 1 
     group by userid, pageid) as from_query 
group by userid; 

ユーザーが持つ1ページあたりの平均レジスタ数を計算します。 reg_page table image

質問:それはFROMフィールドでサブクエリを使用しないようにクエリを変更する方法

  1. reg_pageテーブルは次のようになりますか?

  2. このようなクエリを「平坦化する」一般的な方法はありますか?

答えて

3

ユーザごとのページあたりのレジスタの平均数は、ユーザごとのページ数で割ったユーザごとのレジスタの数として計算することができます。 count個の個数を使用して、ユーザごとに個別のpsgeidsのみを数えます。

このようなクエリを平坦化する一般的な方法はありません。それらのいくつかを平坦化することさえできないかもしれません、そうでなければ最初にこの特徴を持つことに少しのポイントがあります。 from句でサブクエリを使用することに怯えないでください。平坦化されたクエリよりも効果的な場合もあります。しかし、これはベンダーであり、バージョン固有でさえあります。

+2

ありがとうございました!本当に便利でした –

3

一つの方法は、count(distinct)を使用することである。

select userid, count(*)/count(distinct pageid) 
from reg_pag 
where ativa = 1 
group by userid; 
関連する問題