SQL文でidごとの行数を数える方法

このQ&Aのポイント
  • SQL文を使って、idごとの行数を数える方法を教えてください。
  • GROUP BYを使わずに、idごとの行数をカウントする方法を知りたいです。
  • テーブル内のデータをidごとにグループ化することなく、行数を数える方法を教えてください。
回答を見る
  • ベストアンサー

sql文について教えてください

こんにちは。 質問があります。 id | test_num 01 | test1 01 | test2 02 | test1 02 | test2 02 | test3 03 | test1 以上のテーブルの idごとの行数を数えたいのです。 しかし、 id | id_count 01 | 2 02 | 3 03 | 1 ではなく id | test_num | id_count 01 | test1 | 2 01 | test2 | 2 02 | test1 | 3 02 | test2 | 3 02 | test3 | 3 03 | test1 | 1 というふうにGROUP BYを使わない(使っていないような) ようにしたいのです。 どなたか教えていただけないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Select db1.id, db1.test_num, (Select Count(db2.id) From TBL_hoge db2 Where db2.id = db1.id) As id_count From TBL_hoge db1; とかでどうでしょう。

19746999
質問者

お礼

Chronos198さん、はじめまして。 ありがとうございました。 以外にも複雑なSQLだったことに驚きました。 今後もよろしくお願いします。

19746999
質問者

補足

解決しました!(言い忘れ)

関連するQ&A

  • SQL文作成のお願い

    前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?

  • SQLのcount()とgroup by

    以下のようなテーブルがあったとき、 tbl1 id | score 1 | 100 1 | 200 1 | 300 2 | 200 2 | 100 3 | 300 3 | 400 3 | 500 3 | 600 idでまとめて個数を出すとすると、 SELECT count(*) FROM tbl1 group by id とすれば count(*) 3 2 4 と結果が返ってきますが、この結果にidを足して id | count(*) 1 | 3 2 | 2 3 | 4 というようなSQLはどうやって書けばいいのでしょうか? MySQLでは、 SELECT id, count(*) FROM tbl1 group by id と書けるのですが、これは標準的なSQLではNGなそうなので、気になって質問しました。 よろしくお願いします。

  • Access97のクエリー(sql文)について

    [A]テーブルに[CODE.DATE.CHK]とフィールドがあります 内容は、 [CODE][DATE][CHK] 01.2007/06/01.0 01.2007/06/10.1 01.2007/06/11.1 02.2007/05/01.0 02.2007/05/10.1 と、します。 結果を 01.3.2 02.2.1  と、したいのです。 つまり、[DATE]の行数と、[CHK]が1の件数が とりたいのです。 SELECT A.CODE, Count(A.DATE) AS CNT FROM A GROUP BY A.CODE; と、すれば、[DATE]の行数はとれます。 [CHK]が1の件数の取り方が解りません。 宜しくお願い致します。

  • SQL文の書き方

    次のような列の2つテーブルがあります ID,メッセージ,書いた日 ID,名前 一つ目のテーブルに メッセージを追加していき IDの違う最新のメッセージだけ取り出したいのですが 考えても分からなくて… SELECT ID,MAX(書いた日) FROM 一つ目のテーブル GROUP BY ID の時のIDそれぞれのメッセージが取り出せればいいのですが 最終的には IDの部分は別テーブルにある IDと一致する名前に置き換えて取り出したいと思っています よろしくお願いします データベースはPostgreSQLを使っています

  • SQL GROUPで件数の一番多いレコードのみ取る

    SQL GROUPで件数の一番多いレコードのみ取る ORACLE10です。 次のようなテーブルがあります。 USER -----------テーブル名 ID,NAME,DATA----列名 1,A,any 1,A,any 1,B,any 2,C,any 3,D,any このテーブルから、IDをGROUPにして、さらに、一番使用頻度の多いNAMEを取得したいのです。 表示したいのは、IDとNAMEです。 つまり、取得結果例は次のようになります。 取得結果例 ID,NAME----列名 1,A 2,C 3,D SQL文をどのように作れば可能でしょうか? ちなみに、IDやNAMEのマスタテーブルはありません。 自分では、「(select ID, NAME, count(*) from USER group by ID, NAME) COUNT」で、COUNTを内部テーブルにして、グループ内で一番多いcount(*)をmaxで取得してみようかと思ったんですが、そこからアイデアが出ませんでした。

  • SQL

    テーブル仕様は下記のようになっているときに、 mailアドレスには重複したデータが含まれる場合に 全てのデータを取得したいのですが、携帯の重複したデータを省きたいです。 サブクエリーを使って表現しようと思うのですが、どうもうまくいかず。。 numはシーケンシャルナンバーなので、かぶることはないのですが、 何かいい方法はないでしょうか?? 下記のように考えたのですが、どうもうまくいかず。。。 num | id | mail | event | date 1 | 121 | xxxxx@xxx.com | test | 2005-10-11 select * from test_table where 1=1 and event = 'test' and num in(サブクエリー) order by RANDOM() desc limit 3

  • SQL文の構築について教えてください。

    SQL文の構築について教えてください。 こんばんは。Oracle9iのデータベース検索で、どうしてもSQLが思い浮かばないため、質問させていただきます。 ■Table ID    NUM   SIGN 100   1    A 100   2    A 101   1    A 102   1    B 103   1    B 104   1    C 首キーはID、NUMです。 上記のようなテーブルで、 IDが同一かつNUMが最大のもので、 SIGNが同一のレコードで、2件以外のレコードを抽出したいです。 (例表でいうと、ID104のレコードのみが抽出されるようにしたい) すこし急ぎなんですが、SQLが得意でお時間がある方、力を貸していただけないでしょうか。 よろしくお願い致します。

  • SQL文にて・・・

    質問があります。PostgreSQLです。 テーブル(test_tbl)があるとします。 テーブル構成は --------------------------- id ===== char(16) [英数文字格納] point ==== int2 add_date ==== timestamp --------------------------- このテーブルから idが2文字目から'di6ek68dh5ls7g'のレコードを取得したいと考えています。 レコード数がかなりおおいので パフォーマンスを重視したいのですが、 検索SQLがわかりません。 select * from test_tbl where id like '%di6ek68dh5ls7g'だとでると おもうのですが、 これ以上にパフォーマンスがあがる SQLがわかる方お願いいたします。

  • 最新の行だけを抽出するSQL文

    このジャンルでお願いします。 t1テーブル id name 1  aaa 2  bbb 3  aaa t2テーブル id t1_id num 1  1   10 2  2   100 3  1   1000 4  3   1 このようなテーブル構成で、 t1のnameが「aaa」 かつ t2のidが最新の行だけnumを合計した数値を得たいのですが、 この例だと、 まずt2テーブルの id t1_id num 1  1   10 3  1   1000 4  3   1 が該当して、t2のidが最新の行だけなので id t1_id num 3  1   1000 4  3   1 に絞られて、1000+1で「1001」という結果が得たいのです。 どのようなSQL文にすれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • SQL文について困っています

    ID(NUMBER型)と NUM(NUMBER型)と nenngetu (date型)を持ったテーブルAAAから、 ID=1000 のなかで日時が一番古い処理NOをselectするSQL文を書きましたが上手く実行されません。 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA) and ID=1000; ID=1000の条件をはぶき、 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA); でしたら、実行できました。 oracleで実行しようとしています。 どなたか、書き方を教えてください。