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
Личные инструменты