SQL-запрос: кто сколько платит на каждом тарифе
Материал из BiTel WiKi
Версия от 06:37, 25 мая 2010; DimOn (Обсуждение | вклад)
Было такое задание: сделать sql запрос, который будет выводить количество человек напротив ТП которые платят в месяц <100 р 100-200 и тд с шагом 100 р до какой-либо суммы.
Развитие мысли начинается с вывода списка всех тарифов (заодно с количеством их использований в договорах), за базу берём contract_tariff, ибо всё будет крутиться вокруг договора и связок его.
SELECT contract_tariff.tpid, tariff_plan.title, count(contract_tariff.id) FROM contract_tariff LEFT JOIN tariff_plan ON contract_tariff.tpid=tariff_plan.id GROUP BY contract_tariff.tpid
Приход для какого-либо договора (cid=455) за какой-либо месяц (03.2009) проще всего сделать через contract_balance, так:
SELECT summa2 FROM contract_balance WHERE yy=2009 AND mm=3 AND cid=455
Объединяем эти два запроса и что получается? Верно, сколько было всех приходов по каждому тарифу.
SELECT contract_tariff.tpid, tariff_plan.title, count(contract_tariff.id), sum(contract_balance.summa2) FROM contract_tariff LEFT JOIN tariff_plan ON contract_tariff.tpid=tariff_plan.id LEFT JOIN contract_balance ON contract_balance.yy=2009 AND contract_balance.mm=3 AND contract_balance.cid=contract_tariff.cid GROUP BY contract_tariff.tpid