初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2021-11-18 12:46:05

ディザ
Guest

範囲内数値のレコード数のカウント

各レコードに数字をあて、特定の条件に合うレコード数のカウントの方法についてご指南下さい。
例を当てますと…

各生徒のテストデータを作りたいとします。
各レコードにそれぞれの生徒を入れるのですが、
「平均点」フィールドに点数のデータを、
フッタパートに
「カウント_0」フィールド = 0点の生徒のレコード数
「カウント_10」フィールド = 1〜10点の生徒のレコード数
「カウント_20」フィールド = 11〜20点の生徒のレコード数

「カウント_100」フィールド = 100点の生徒のレコード数

としたいのです。

例→
レコード数が5つあり、各生徒の平均点が(「平均点」フィールドに入力する数値)
82 13 0 98.7 19.2 の場合、
カウント_0フィールドが「1」 ←該当データが1つあるため
カウント_10フィールドが「2」←該当データが2つあるため(13と19.2)
カウント_80フィールドが「1」←該当データ 82
カウント_90フィールドが「1」←該当データ 98.7
それ以外のカウントフィールドは該当データがないため「0」と表記

というシステムにしたいのです。


初心者で至らない箇所もありますが、
ご助力下さいますと幸いです。

#2 2021-11-18 13:24:56

チポ
Member

Re: 範囲内数値のレコード数のカウント

書かれた例は整合性が取れていませんよ。

> 「カウント_10」フィールド = 1〜10点の生徒のレコード数
> カウント_10フィールドが「2」←該当データが2つあるため(13と19.2)


計算フィールド・繰り返し を作り、
各繰り返し位置にカウントを割当て、
点数からカウントに対応する繰り返し位置のみに1を、他は空白か0を入力。
それを集計フィールドで繰り返し位置個々の集計を取ればいいでしょう。

Offline

#3 2021-11-18 13:35:19

ディザ
Guest

Re: 範囲内数値のレコード数のカウント

チポさんへ

説明をもっと明確化するべきでさしたね。申し訳ありません。

「カウント_○○」フィールドは入力せず、反映させるだけのことです。
つまり、対象レコードがいくつあるかをしりたい、それだけのことです。
新規レコードをさらに追加して「平均点」フィールドに例えば15を入力したとすると、
さっきの例に例えると
カウント_10フィールドが「3」に変化する ←該当データが3つあるため(13と19.2に15が追加されるため)

平均点フィールドに入力した数値の量によって
どのカウントにいくつのレコードがあるかの数を知る、と言う目的です。

補足ですが、先ほどの例だと小数点を含んでいるのがあったので、正確には

「カウント_10」フィールド = 1〜10点の生徒のレコード数 ではなく
「カウント_10」フィールド = 1.01〜10点の生徒のレコード数

他にも…
「カウント_20」フィールド = 10.01〜20点の生徒のレコード数
などとするべきでしたね。

#4 2021-11-18 13:39:04

ディザ
Guest

Re: 範囲内数値のレコード数のカウント

なので
> 「カウント_10」フィールド = 1〜10点の生徒のレコード数
> カウント_10フィールドが「2」←該当データが2つあるため(13と19.2)

ではなく
> 「カウント_10」フィールド = 1〜10点の生徒のレコード数
> カウント_20フィールドが「2」←該当データが2つあるため(13と19.2)
の訂正でございます。

#5 2021-11-18 13:47:44

チポ
Member

Re: 範囲内数値のレコード数のカウント

とすると、
カウント_90
は80.01〜90点となり、

> 「カウント_100」フィールド = 100点の生徒のレコード数
これでは90点台はどうします?

また、
0.01~1とか、ほかにも整合できていないところがありますよ


> 「カウント_○○」フィールドは入力せず、反映させるだけのことです
そう考えての回答でしたよ。。

Offline

#6 2021-11-18 14:00:00

ディザ
Guest

Re: 範囲内数値のレコード数のカウント

0と100は固定です。0と100を含む0.01から99.99までの数値を対象に各カウントフィールドでの該当レコード数の表示をする、ということです。
便宜上平均点フィールドを入れていますが、紛らわしければ以下の説明で「点」を省きます。
カウント_0フィールド→0のみ
カウント_10フィールド→0.01から10の範囲
カウント_20フィールド→10.01から20の範囲
カウント_30フィールド→20.01から30の範囲
カウント_40フィールド→30.01から40の範囲
カウント_50フィールド→40.01から50の範囲
カウント_60フィールド→50.01から60の範囲
カウント_70フィールド→60.01から70の範囲
カウント_80フィールド→70.01から80の範囲
カウント_90フィールド→80.01から90の範囲
カウント_99フィールド→90.01から99.99の範囲
カウント_100フィールド→100のみ
こうします。

ちなみに0未満・100.01以上は対象外です。

#7 2021-11-18 15:56:35

Shin
Member

Re: 範囲内数値のレコード数のカウント

その12個のフィールドを繰り返しフィールドにすることにして、
Get ( 計算式繰り返し位置番号 ) - 1 = Ceiling ( 平均点[1] / 10 ) + Div ( 平均点[1] ; 100 )
という繰り返しの計算フィールドを作ります。それを個別に合計する集計フィールドを作るといいでしょう。

https://www.dropbox.com/s/ks7p7zhwtt4hu … 2.zip?dl=0

Last edited by Shin (2021-11-19 09:02:12)

Offline

#8 2021-11-19 02:06:30

Hiro
Member

Re: 範囲内数値のレコード数のカウント

生徒別の集計結果を繰り返し[12回]SQL計算フィールドに一発取得する案です。
その計算式に以下のSQL関数式を設定します。(他に必要な設定は一切ありません)

ExecuteSQL(
   "
      SELECT COUNT(*)
      FROM ""このテーブル名""
      WHERE ""生徒""=? AND ""平均点"">? AND ""平均点""<=?
   "
   ; ""
   ; ""
   ; 生徒[1] & Left(平均点[1]; 0)
   ; Case(
         Get(計算式繰り返し位置番号)=1; -.01;
         Get(計算式繰り返し位置番号)=12; 99.99;
         (Get(計算式繰り返し位置番号)-2)*10
      )
   ; Case(
         Get(計算式繰り返し位置番号)=11; 99.99;
         Get(計算式繰り返し位置番号)=12; 100;
         (Get(計算式繰り返し位置番号)-1)*10
      )
)

Offline

#9 2021-11-19 07:16:39

himadanee
Guest

Re: 範囲内数値のレコード数のカウント

検索結果を集計したい場合は、SQLのWHERE条件を追加する必要がありますね。

質問の文章が「各生徒の」となってるけど、実際は単純に各レコードに既に存在する「平均点」という値を区分集計するだけ

(各生徒の平均点が(「平均点」フィールドに入力する数値)
82 13 0 98.7 19.2 の場合)

で、そこに「生徒別」という観点はない(基本的に1レコード1生徒)のでは?

#10 2021-11-27 02:02:27

ディザ
Guest

Re: 範囲内数値のレコード数のカウント

Shinさんのやり方で、無事行いたいことが実現出来ました。(12個のフィールドを繰り返しフィールドにするやり方)
今まで各フィールドを別々に作っていましたが、繰り返しフィールドの方がわかりやすいんですね。

他の方のメッセージも参考にしつつ、これをもちまして解決と致します。
ありがとうございました。

Registered users online in this topic: 0, guests: 1
[Bot] claudebot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 528.39 KiB (Peak: 549.3 KiB) ]