Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подсчёт (count) с условиями / 6 сообщений из 6, страница 1 из 1
12.12.2016, 14:37
    #39364900
mlader
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт (count) с условиями
Здравствуйте.

Помогите, пожалуйста, составить запрос.
Есть две таблицы (users и payments) - см. ниже.
Нужно получить в результате количество платежей (или просто единицу, если платежей больше одного), которые совершил пользователь в данном периоде, с группировкой по
Код: plaintext
name
и периоду, в который попадает поле
Код: plaintext
date
, причем если пользователь не делал платежей в данном периоде, показывать ноль.

таблички под спойлером users:
Код: plaintext
1.
2.
3.
4.
id	name
100	Иван
101	Петр
102	Федор
103	Сергей

payments:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
client_id	date			amount
100		01.01.2016		100
101		15.01.2016		300
100		17.01.2016		50
102		10.02.2016		150
102		11.02.2016		50
102		12.02.2016		50
103		19.02.2016		100
103		22.02.2016		100
101		28.02.2016		100
101		01.03.2016		150
103		02.03.2016		300
100		05.03.2016		100
101		10.03.2016		50
100		11.03.2016		100
103		24.03.2016		200
101		01.04.2016		100
101		05.04.2016		50


желаемый результат (чтобы нули тоже фигурировали):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
name	date start	date end	count()	is_active
Иван	01.01.2016	29.02.2016	2	1
Иван	01.03.2016	30.04.2016	2	1
Петр	01.01.2016	29.02.2016	2	1
Петр	01.03.2016	30.04.2016	4	1
Федор	01.01.2016	29.02.2016	3	1
Федор	01.03.2016	30.04.2016	0	0
Сергей	01.01.2016	29.02.2016	2	1
Сергей	01.03.2016	30.04.2016	2	1




Моё творчество дальше этого не ушло, к сожалению:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select u.name, count(case
                     when date between '01.01.2016' and '29.02.2016' then 1
                     else null
                     end)
        from users u, payments p
        where u.id = p.client_id
        group by username
 
...
Рейтинг: 0 / 0
12.12.2016, 14:50
    #39364919
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт (count) с условиями
mlader,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT U.ID,U.NAME,NVL2(X.SUM_AMOUNT,0.00)SUMPAYMENT,NVL2(X.COUNTPAY,0)COUNTPAYMENT
FROM USERS U
LEFT JOIN
(
  SELECT P.CLIENT_ID,SUM(AMOUNT)SUM_AMOUNT,COUNT(P.CLIENT_ID)COUNTPAY
  FROM PAYMENTS P
  WHERE P.PAYDATE BETWEEN ....
  GROUP BY P.CLIENT_ID
)X ON U.ID=X.CLIENT_ID


как-то так.
...
Рейтинг: 0 / 0
12.12.2016, 15:39
    #39364990
Alexls
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт (count) с условиями
mlader,

где то так
select u.name, CASE
WHEN count > 0 THEN 1
ELSE 0
END count from (select u.name, count(*) AS count
from users u, payments p
where when date between '01.01.2016' and '29.02.2016' AND u.id = p.client_id
group by username)
...
Рейтинг: 0 / 0
12.12.2016, 15:46
    #39364999
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт (count) с условиями
mlader,
Добавь запрос с периодами, объедини его с платежами и пользователями, сгруппируй по пользователю и периоду, посчитай количество строк.
...
Рейтинг: 0 / 0
13.12.2016, 09:48
    #39365461
Xdredd.vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт (count) с условиями
mlader, сдается мне что count тут не нужен
Код: plsql
1.
2.
3.
4.
 select g.name, sum(case when true then 1 else 0 end) result
    into v_earth
  from  t_space g
  group by g.name;
...
Рейтинг: 0 / 0
13.12.2016, 16:41
    #39365929
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчёт (count) с условиями
mlader,

где табличка с периодами? или брать по 2 месяца?

.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подсчёт (count) с условиями / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]