<h1>Statistik sortiert nach Klassen</h1> <h3>Durchschnittsnoten FHR, d.h. nur Absolventen werden berücksichtigt</h3> Legende: Schulnummer, Anzahl der Schüler von abgehender Schule, Schnitt, davon gültige Einträge <br> <button on:click="getKlasse('A')">A-Klassen</button> <button on:click="getKlasse('B')">B-Klassen</button> <button on:click="getKlasse('C')">C-Klassen</button> <button on:click="getKlasse('D')">D-Klassen</button> <button on:click="getKlasse('E')">E-Klassen</button> <button on:click="getKlasse('F')">F-Klassen</button> <button on:click="getKlasse('G')">G-Klassen</button> <button on:click="getKlasse('H')">H-Klassen</button> {#each Object.entries(schulen) as [schule, values]} <br>{schule}: {values.length} -> Durchschnittsnote: {dsn(values).join(': ')} {/each} <h3>DSN nach Alter bzw. Geburtsjahr</h3> {#each Object.entries(dsnNachAlter) as [baujahr, values]} <br>{baujahr}: {values.length} -> Durchschnittsnote: {dsn(values)[0]} {/each} <h3>FOS11 nach Alter und D,M,E</h3> {#each Object.entries(dmeNachAlter) as [baujahr, values]} <br>{baujahr}: {values.length} -> Durchschnittsnote: {dme(values)} {/each} <script> export default { setup(Component) {Component.bez = 'Statistik'}, oncreate () { const { knex } = this.get() R.objection.Model.knex(R.knex({ client: 'mysql', useNullAsDefault: true, connection: { host: knex.host, database: knex.name, user: knex.user, password: knex.password, charset: 'utf8' } })) }, helpers: { dme (a) { const arr = R.lodash.filter(a, a => a.abschnitte && a.abschnitte[1] && a.abschnitte[1].noten[0] && a.abschnitte[1].noten[0].NotenKrz) let ln = arr.length // console.log(arr) const r = arr.reduce((total, value) => { const noten = R.lodash.filter(value.abschnitte[1].noten, n => ['DEKO', 'EN', 'MA'].includes(n.fach.FachKrz)) const summe = noten.reduce((t, v) => t + parseFloat(v.NotenKrz), 0)/3 return total + summe }, 0) // console.log(r) return `${(r / ln)} (${ln}/${a.length})` }, dsn (arr) { let ln = arr.length const r = arr.reduce((total, value) => { const float = parseFloat(value.DurchschnittsnoteFHR.replace(',', '.')) if (float) return total + float else ln += -1 return total }, 0) return [(r / ln).toFixed(1), ln, arr.length] }, }, methods: { async getKlasse (pattern) { const schueler = await R.models.Schueler.query() .where('Klasse', 'like', pattern + '%') .eager('abschnitte.[noten.fach]') this.set({gruppe: schueler}) } }, computed: { schulen: ({gruppe}) => { const dsn = R.lodash.filter(gruppe, 'DurchschnittsnoteFHR') return R.lodash.groupBy(dsn, 'LSSchulNr') }, dsnNachAlter: ({gruppe}) => { const dsn = R.lodash.filter(gruppe, 'DurchschnittsnoteFHR') return R.lodash.groupBy(dsn, (s) => { return new Date(s.Geburtsdatum).getFullYear()}) // console.log(R.lodash([1,2,3,4])) //, (s) => { return new Date(s.Geburtsdatum).getFullYear()})) }, dmeNachAlter: ({gruppe}) => { const fos11 = R.lodash.filter(gruppe, s => s['PruefOrdnung'] === 'APO-BK-11/C-FOS' && s.status === "8") return R.lodash.groupBy(fos11, (s) => { return new Date(s.Geburtsdatum).getFullYear()}) } // } }, data () { return { gruppe: null } } } </script>