48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
const { Client } = require('pg');
|
|
|
|
async function main() {
|
|
const conn = new Client({
|
|
host: 'localhost',
|
|
port: 5432,
|
|
user: 'postgres',
|
|
password: 'turbo123',
|
|
database: 'genome_db'
|
|
});
|
|
await conn.connect();
|
|
|
|
const farmNo = 1;
|
|
|
|
// 농가 내 모든 개체의 선발지수(가중 합계) 조회
|
|
const farmCowsResult = await conn.query(`
|
|
SELECT c.cow_id, SUM(gtd.trait_ebv) as sum_ebv
|
|
FROM tb_genome_request gr
|
|
JOIN tb_cow c ON gr.fk_cow_no = c.pk_cow_no
|
|
JOIN tb_genome_trait_detail gtd ON gtd.cow_id = c.cow_id AND gtd.del_dt IS NULL
|
|
WHERE gr.fk_farm_no = $1 AND gr.del_dt IS NULL AND c.del_dt IS NULL
|
|
AND gr.chip_sire_name = '일치'
|
|
GROUP BY c.cow_id
|
|
HAVING COUNT(*) = 35
|
|
ORDER BY sum_ebv DESC
|
|
`, [farmNo]);
|
|
|
|
const farmCows = farmCowsResult.rows;
|
|
|
|
console.log('=== 농가 1번 개체별 선발지수 (가중 합계) ===\n');
|
|
|
|
let total = 0;
|
|
farmCows.forEach((c, i) => {
|
|
const score = Number(c.sum_ebv);
|
|
total += score;
|
|
console.log(`${i+1}. ${c.cow_id}: ${score.toFixed(2)}`);
|
|
});
|
|
|
|
console.log('\n=== 계산 ===');
|
|
console.log('개체 수:', farmCows.length);
|
|
console.log('선발지수 총합:', total.toFixed(2));
|
|
console.log('농가 평균 = 총합 / 개체수 =', total.toFixed(2), '/', farmCows.length, '=', (total / farmCows.length).toFixed(2));
|
|
|
|
await conn.end();
|
|
}
|
|
|
|
main().catch(console.error);
|