• ベストアンサー

ある単位で集計した最小値を項目に追加したい

あるSQLを実行した結果 ある集計行(X1)が出るとします。 集計行(X1) ------- 12 15 23 24 28 31 45 47 ------- ここで、集計行の左の数字でグルーピングして、その中のもっとも小さい数字を 集計行の横に出すとします。(行数は変わりません) 集計行(X1),項目2 ------- 12 ,12 15 ,12 23 ,23 24 ,23 28 ,23 31 ,31 45 ,45 47 ,45 ------- もとのSQLを 「select X1 from zz where 条件1」 とした場合、どのようにすればこの結果が得られるでしょう?

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

  • ベストアンサー
  • dda167
  • ベストアンサー率76% (55/72)
回答No.3

-- こういうことじゃないのかな? select X1, min(X1) over (partition by substr(X1,1,1)) from zz where 条件

evaan
質問者

お礼

まさに求めたい通りの結果が出ました。 partition by ってたまに見る程度だったのですが、 こういう使い方をするのですね。 他の方々の解答でもできるかも知れませんが、 今回、この方法を採用するようにしました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

もしかして、X1の数の十の位の数で、グルーピングすればいいのかな?? select a.X1,b.minX1 from (select X1,X1 - mod(X1,10) as GroupX1 from zz 条件1) a, (select min(X1) as minX1,X1 - mod(X1,10) as GroupX1 from zz 条件1 group by X1 - mod(X1,10)) b where a.GroupX1=b.GroupX1 ;

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

項目2をひねり出す手段が明示されていないので、回答できる方は居ないと思いますよ。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 集計関数の合計について

    お世話になります。 SQLSever2005を使用しています。 Count(*)で月毎のデータ件数を集計し、またその結果を出力するSQLを考えております。 SELECT  (SELECT Count(*) FROM TBL_TEST T1 WHERE T1.T_DATE>='2005/01/01' AND T1.T_DATE=<'2005/01/31') AS CNT_1,  (SELECT Count(*) FROM TBL_TEST T2 WHERE T2.T_DATE>='2005/02/01' AND T2.T_DATE=<'2005/02/31') AS CNT_2,   (SELECT Count(*) FROM TBL_TEST T3 WHERE T3.T_DATE>='2005/03/01' AND T3.T_DATE=<'2005/03/31') AS CNT_3,   (CNT_1+CNT_2+CNT_3) AS TOTAL_CNT ・・・・・・・・・・・・ (★)  FROM TBL_TEST T  WHERE ・・・・・・・・・ 結果(★)のところで『CNT_1は無効です』というエラーになってしまいます。 ちなみにAccessではエラーにならずに結果を出力していました。 上記のSQL文はどのように修正すればよろしいでしょうか?

  • 副問い合わせについて

    お世話になります。明日から仕事で使うのですが、下記の構文が よく理解できません。宜しくお願い致します。 SQL Severは経験ありません。 経験はInfomixSql,Access,MySql程度です。 (1)行副問い合わせ(副問い合わせの結果が1行n列で返ってくる) SELECT * FROM t1 WHERE (c4, c2) = (SELECT MAX(c1), 'a' FROM t2); このwhere節の結合条件はどのような感じになるのでしょうか? (2)表副問い合わせ(副問い合わせの結果がm行n列(表)で返ってくる) SELECT * FROM t1 WHERE c4 IN ( SELECT c1 FROM t2 WHERE c4 >= 10 ) ORDER BY c1; 、 SELECT x1.c1, x2.y4 FROM t1 x1, ( SELECT c3, SUM(c4) AS y4 FROM t2 GROUP BY c3) AS x2 WHERE x1.c3 = x2.y4 ORDER BY c1; (1)に同じです。 参考になりそうなサイトでも結構ですので 宜しくお願い致します。

  • VB.NETでDataTableにデータ追加したい

    VisualStugio.Net2003でソースコードを記述しており、コード内でSQLのSELECT文を実行して、実行結果をDataTableに格納する処理をしています。 今回、とあるテーブルに対し2パターンのSQLを実行し、それぞれの実行結果を1つのDataTableに格納したいのですが、どのようにすれば良いでしょうか? 自分で調べたところ、先に実行したSQL結果に、後から実行したSQL結果を1行ずつ追加するといった方法は見つかりましたが、1行ずつではなく、一括で追加する方法が知りたいです。 前提として、2回のSQL実行では、同じテーブルの同じ項目をSELECTしております。 下記に簡単ですがコード記述の概要を補足しておきます。 ・コード記述概要 【変数宣言】 Dim DB1 As DataTable Dim DB2 As DataTable 【SQL文1】 SELECT A,B,C FROM テーブル1 WHERE 条件文1 DB1 = SQL文1の実行結果 【SQL文2】 SELECT A,B,C FROM テーブル1 WHERE 条件文2 DB2 = SQL文2の実行結果 【DB1にDB2のデータを追加】←ここのやり方を知りたいです DB1 = DB1 + DB2 よろしくお願いいたします。

  • データの件数を集計するための SQL

    データの件数を集計するための SQL について教えてください。 例えば以下のようなテーブルがあります。 ▼テーブル 名前 |交通手段|日付 -----+--------+---- Aさん|バス |5/1 Aさん|バス |5/2 Aさん|バス |5/3 Bさん|バス |5/1 Bさん|電車 |5/2 ※「日付」については、本質問に直接の関係はありません。 このテーブルにクエリを発行して、以下の結果を取得したいと考えています。 ▼取得したい結果 名前 |交通手段|回数 -----+--------+---- Aさん|バス |3 Bさん|バス |1 Bさん|電車 |1 当方がイメージしている流れは以下の通りです。 SQL は苦手でして、これをひとつにまとめることができません。 1) GROUP BY で束ねる SELECT 名前, 交通手段 FROM テーブル GROUP BY 名前, 交通手段 2) 1)の結果の1件目をSELECTする SELECT COUNT(*) FROM テーブル WHERE 名前='Aさん' AND 交通手段='バス' 3) 1)の結果の2件目をSELECTする SELECT COUNT(*) FROM テーブル WHERE 名前='Bさん' AND 交通手段='バス' 4) 1)の結果の3件目をSELECTする SELECT COUNT(*) FROM テーブル WHERE 名前='Bさん' AND 交通手段='電車' なおレンタルサーバ上 (MySQL 5.0.77) で稼働させるため、 なるべく高速な SQL を希望いたします。

    • ベストアンサー
    • MySQL
  • サブクエリの複数項目

    いつもお世話になっております。 サブクエリで複数項目を取得する方法をご教授下さい。 [既存] select 商品, 価格, (select user_id from user_master where user_id = 1 ) from products where 商品ID = 1 上記のようなSQLがあり、 user_masterから取得する項目をもうひとつ追加したいと思っています。(user_name) select 商品, 価格, (select user_id, user_name from user_master where user_id = 1 ) as user from products where 商品ID = 1 と修正したいのですが、当然エラーになってしまいます。 この場合は別にサブクエリを指定して取得した方がいいのでしょうか。 宜しくお願い致します。

  • 年齢分布テーブルの再集計SQL

    テーブルA 年齢,人数 20,15 21,11 22,26 .... 30,5 31,88 ... 60,5 上記テーブルAからのSQLで下記のデータが欲しいと思っております。 【欲しい結果】 年齢範囲,人数 20~24,50 25~29,33 30~34,199 ... ただし、 select '20~24'as 年齢範囲,count(*)as 人数 from テーブルA where 条件1 union select '25~29'as 年齢範囲,count(*)as 人数 from テーブルA where 条件2 union select '30~34'as 年齢範囲,count(*)as 人数 from テーブルA where 条件3 ... というSQLは使いたくないです。(テーブルAの記述が長めなので、同じものを複数記述したくないのです) また結果が 項目名:20~24,25~29,30~34,... レコード:50,33,199,... というのも遠慮したいです。 CASE文やsum、groupを使えば、できそうな気がするのですが、、、 ご教授お願い致します。

  • 結合と集計、同一のステートメント上だとエラーになる

    PostgreSQL初心者です。 結合と集計、別々のsqlステートメントだと動くのですが、同一のステートメントに記述するとエラーになります。 どなたか教えていただけると大変助かります。 phpPgAdmin を利用しております。 =エラーになったsqlステートメント= SELECT "pointm"."usercd", Sum("pointm"."getpoint"), "userm"."nickname" FROM "pointm" INNER JOIN "userm" on "pointm"."usercd" = "userm"."usercd" WHERE "pointm"."class" = '1' GROUP BY "pointm"."usercd"; =エラーメッセージ= ERROR: Attribute userm.nickname must be GROUPed or used in an aggregate function =動いた結合sql= SELECT "pointm"."usercd", "userm"."nickname" FROM "pointm" INNER JOIN "userm" on "pointm"."usercd" = "userm"."usercd" WHERE "pointm"."class" = '1'; =動いた集計sql= SELECT "pointm"."usercd", Sum("pointm"."getpoint") FROM "pointm" WHERE "pointm"."class" = '1' GROUP BY "pointm"."usercd";

  • 列番号による項目の取得について

    SQLの構文についての質問です。 あるテーブルからデータを取得する場合、 「SELECT 項目名1,項目名2・・ FROM テーブル名 WHERE 条件」 というSQL文となりますが、 項目名1,項目名2の部分を列番号を指定することによって 値を取得することは可能でしょうか?

  • 集計についてのSQLの組み立て方

    SQLについての質問です。 MySQLを使っています。 1か月間の得意先別の入金の集計を取りたいと思っています。 表としては以下のような感じです。 ID  得意先名  現金計 振込計 相殺計 手数料計  合計 =========================================================== 001 aaaaaaa   30,000  40,000  25,000    840  95,840 002 bbbbbbb   10,000  20,000  30,000    420  60,420 SELECT * sum(nyukin) AS genkin FROM nyukin_meisai WHERE tokuisaki_id = '001' AND nyukin_kubun = '現金' AND uriage_bi BETWEEN '2014/05/01' AND '2014/05/31' SELECT * sum(nyukin) AS furikomi FROM nyukin_meisai WHERE tokuisaki_id = '001' AND nyukin_kubun = '振込' AND uriage_bi BETWEEN '2014/05/01' AND '2014/05/31' 以下続く と得意先毎/各区分ごとに一つひとつSQLを発行すればできるんでしょうけど、 これをひとつのSQLで実現したいと思っていますがSQLをどのように組み立て てよいものやら困っています。 case を組み込んだりしてもうまくいきませんでした。 どなたかご指導下さい。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 同一フィールドの違う値ごとに集計・それぞれ別フィールドに表示したい

    初心者です。 どなたかご教授いただけると助かります。 ===== =table1= usercd point class 1 100 5 2 200 5 1 500 5 3 150 11 =table2= usercd point class 1 150 11 2 700 5 3 200 11 のように、データが2つのテーブルに分かれています。 table1とtable2をUNIONして、usercd ごとの各class の point 合計を表示させたいと思います。 =結果(として期待しているもの)= usercd class5合計 class11合計 1 600 150 2 900 0 3 0 350 ========== UNION して 片方(例:class5) の合計を集計することは出来ました。 =出来たsql= SELECT "usercd",Sum("point") FROM (SELECT * FROM "table1" UNION ALL SELECT * FROM "table2") AS "sumpoint5" WHERE "class" = '5' GROUP BY "usercd"; しかし、それぞれの合計を一度に集計する方法がわかりません。 どうぞよろしくお願いいたします。

DCP-J567Nの細かい印刷品質設定
このQ&Aのポイント
  • インストールしなおしたら、細かい印刷品質設定画面がなくなった
  • パソコンのOSはWindows 11で、接続は無線LAN、関連するソフト・アプリはなし
  • 電話回線の種類はひかり回線
回答を見る