prep window tenders avg bids median bids single bidder tender ids
10-19 days
19
2.79
2
5
143415, 144471, 144476, 144555, 146863, 151019, 151080, 151178, 153192, 153292, 153433, 153570, 153631, 154274, 155433, 156048, 157384, 157387, 157474
20-29 days
6
14.67
2.5
1
144497, 148738, 150902, 152877, 155963, 156355
30+ days
3
3.33
3
0
133703, 144117, 148991
WITH t AS (
  SELECT
    tender_id,
    procedure_type,
    try_cast(days_to_prepare AS DOUBLE) AS days_to_prepare,
    try_cast(total_bids AS DOUBLE) AS total_bids,
    try_cast(award_amount AS DOUBLE) AS award_amount,
    general_agreement
  FROM xlsx_inventory_v3_4b022d33_5
  WHERE try_cast(days_to_prepare AS DOUBLE) IS NOT NULL
    AND try_cast(total_bids AS DOUBLE) IS NOT NULL
)
SELECT
  CASE
    WHEN days_to_prepare < 10 THEN '<10 days'
    WHEN days_to_prepare < 20 THEN '10-19 days'
    WHEN days_to_prepare < 30 THEN '20-29 days'
    ELSE '30+ days'
  END AS prep_window,
  count(*) AS tenders,
  round(avg(total_bids), 2) AS avg_bids,
  median(total_bids) AS median_bids,
  sum(CASE WHEN total_bids=1 THEN 1 ELSE 0 END) AS single_bidder,
  string_agg(tender_id, ', ' ORDER BY tender_id) AS tender_ids
FROM t
GROUP BY 1
ORDER BY min(days_to_prepare);