• ベストアンサー

group化による件数順で表示

msystemの回答

  • ベストアンサー
  • msystem
  • ベストアンサー率42% (79/186)
回答No.1

やってみたことがないので、できるとはいえませんが、多少のスピードを我慢するのであれば、サブクエリにしてはどうでしょうか? select * from ( select Author,count(MsgID) as 件数 from messages group by Author) order by 件数 アクセスで1つのクエリの中にサブクエリが許されるかどうかがわかりません(特にgroup byがあるので・・・)できなければ、クエリを2つに分けられてはどうでしょうか?

s-holmes
質問者

お礼

回答ありがとうございました。 恥ずかしながら「サブクエリ」というのが身についていません。そう言われれば、確か聞いたことがある・・・というレベルです。 #目的の表示はおかげ様でできました。 #勉強になりました。(*^^*)

関連するQ&A

  • クロス集計での order by句の使い方

    下記の order byの部分を年月日でなく合計件数順に並べ変えたいのですが、Count(氏名)を入れると「 order by句で集計関数は使えません」のようなメッセージが出ます。(access2000) 何か良い方法はないでしょうか。 TRANSFORM Count(氏名) AS 氏名のカウント SELECT 年月日, Count(氏名) AS 合計件数 FROM 日誌 GROUP BY 年月日 ORDER BY 年月日 PIVOT 区分; #access素人です。

  • SQLでグループ化した結果の件数を求めるには?

    下記のようなグループ化した結果を表示するSQL文を作りました。 SELECT メーカコード FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)="BUHIN1") これを実行するとちゃんと結果が出るのですが、その結果の件数を求めるにはどのようなSQL文を追加すれば宜しいのでしょうか? COUNT文を使うと出来そうなのですが、 SELECT メーカコード, COUNT(メーカコード) AS CNT FROM 部品表 GROUP BY メーカコード, 部品番号 HAVING ((部品番号)="BUHIN1") とやるとメーカコードの個別件数が表示されてしまいます。 どうぞよろしくお願いします。

  • 売上げ件数順のSQLについて

    売上げ件数順のSQLについて ユーザーごとに、日別の売上データを下記のSQLで集計しています。 これを、グループ化を保ったまま、全期間での売上げ件数合計の多いユーザー順に並び替えるにはどうすればよいでしょうか? select w.user_id as user_id, DATE_FORMAT(w.created_at,"%Y-%m-%d") as days,w.type as type, count(*) as num from uriage w group by user_id,type,days order by user_id,days,type; +---------+------------+-----------------+-----+ | user_id | days    | type      | num | +---------+------------+-----------------+-----+ |    1 | 2010-10-15 | カテゴリ1   |  1 | |    1 | 2010-10-15 | カテゴリ2   |  1 | |    1 | 2010-10-15 | カテゴリ3   |  5 | |    1 | 2010-10-16 | カテゴリ2   |  1 | |    1 | 2010-10-16 | カテゴリ3   |  1 | |    2 | 2010-10-15 | カテゴリ1   |  1 | +---------+------------+-----------------+-----+

  • 1個のSQL分で2種類以上の件数値を取得する

    SQL分の記述で質問なんですが、 データベース上に日付、時間、フラグと言う項目があります。 同一の日付、時間のものは数件ずつあります。 フラグは"b"と"1"があります。 このデータの日付・時間辺りの件数と+フラグが"1"の件数を同時に取得するSQL分はかけますでしょうか? 別々ならば、 SELECT DATE,TIME,COUNT(*) AS KENSU1 FROM W_TABLE GROUP BY DATE,TIME ORDER BY DATE,TIME と SELECT DATE,TIME,COUNT(*) AS KENSU2 FROM W_TABLE WHERE FLG="1" GROUP BY DATE,TIME ORDER BY DATE,TIME でかけると思うのですが、 1個のSQL分で記述は可能でしょうか? 処理結果を 05/02/23 12:00 10 5 05/02/24 10:00 12 3 (日付・時間・件数・フラグ="1"の件数  見たいに取得したいのですが..

  • RDOでテーブルの件数を求める一番早い方法は?

    Set rcsD = goRDO_Con.OpenResultset(sSQL, rdOpenKeyset, rdConcurReadOnly) で開いて movelast して rcsd.countを取るのと count(AAA) AS 読込件数でとって Set rcsD = goRDO_Con.OpenResultset(sSQL, rdOpenForwardOnly, rdConcurReadOnly) rcsD!読込件数 で求めるのはどっちがはやいのでしょう?

  • SQL 件数取得を速くしたい

    SQLでテーブルなどからSELECTされた件数を得る際に、 select count(*) from ~ 等とするかと思いますが、この結果が返ってくるのが遅くて困っています。 少しでも速く件数を得たいのですがどのような方法がありますでしょうか? 教えてください。 私が使っている環境はOracle 8iで 特に今回はgroup byを含むビューからの検索を行おうとしています。

  • WITH句を使用したSQLの結果

    WITH句を使用して総件数と1~20件までのデータを同時に取得するSQLを組んでみたところ、 WITH TMP AS (SELECT ROW_NUMBER() OVER (ORDER BY NO) AS CHECKROWNUM,NAME FROM TEST_TBL ORDER BY NO) SELECT T1.ALLCNT, T2.* FROM (SELECT COUNT(*) ALLCNT FROM TMP) T1, TMP T2 WHERE T2.CHECKROWNUM BETWEEN 1 AND 20; Oracle10.2.0.3.0のバージョンで ALLCNTが21になってしまう現象が発生してしまいました。 Oracle10.2.0.4.0や9iでは発生せず正しい総件数が取得できるのですが、 バージョンによる不具合は考えられますでしょうか。 それともSQL自体なにか悪い部分があるのでしょうか。 ちなみに T2.CHECKROWNUM BETWEEN 1 AND 100; と帰るとALLCNTが101と帰ってきます。 また、WITH句を使わず下記のようにTMPの部分をWITH句で使用したSQLに 置き換えると正しくALLCNTが取れます。 SELECT T1.ALLCNT, T2.* FROM (SELECT COUNT(*) ALLCNT FROM (SELECT ROW_NUMBER() OVER (ORDER BY NO) AS CHECKROWNUM,NAME FROM TEST_TBL ORDER BY NO)) T1, (SELECT ROW_NUMBER() OVER (ORDER BY NO) AS CHECKROWNUM,NAME FROM TEST_TBL ORDER BY NO) T2 WHERE T2.CHECKROWNUM BETWEEN 1 AND 20;

  • ORACLEでの件数カウント方法

    素人なので教えてください。sqlplusでレコード件数をカウントしたいのですが、チョット特殊なカウント方法なのです。やりたいことは、一回のSQL文で複数カラムのレコード件数をカウントしたいのですが可能でしょうか? 例) a_cdの件数カウントの場合は、 select a_cd,count(*) from abc group by a_cd; で b_cdの件数カウントの場合は、 select b_cd,count(*) from abc group by b_cd; これを一回のSQLで、 a_cdとb_cdの件数をカウント出来ますか?

  • MySQL4でViewの代わりにできますか?

    PostgreSQLで下記のようなビューを作成し、そのビューから日付でgroupbyして日付ごとのユニーク件数を取っていました。 ---------------------------------------------- create view v_uniqcountday as select substring(datetime, 1, 8) as date, uniqid, careercd, count(*) as cnt from accesslog group by date, uniqid, careercd order by date; select date, count(*) as cnt from v_uniqcountday where (date >= xxx) and (date < xxx) group by date; ---------------------------------------------- しかし、MySQLではViewは作成できないようです。 そこでselect文のみで上記のような集計は可能でしょうか? よろしくお願いいたします。

  • DB2で UNION ALL と GROUP BY の合わせ技のSQLの作り方

    DB2で下記SQLにグループ化して 合計やカウント数を出したいのですが、 うまくいきません --------------------------------------- SELECT A.NYU1 AS NYU ,0 AS SYU ,A.KEN1 AS KEN ,A.CODE1 AS CD From A ) UNION ALL ( SELECT 0 AS NYU ,B.SYU2 AS SYU ,B.KEN2 AS KEN ,B.CODE2 AS CD From B ) ORDER BY CD --------------------------------------- MS-ACCESSなら以下のような感じでうまくいくのですが。。。 SELECT SUM(NYU) AS A ,COUNT(SYU) AS B FROM ( SELECT F1 ,F2 FROM A UNION ALL SELECT G1,G2 FROM B ) GROUP BY NYU ご教授お願いします