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

Помогите, пожалуйста, составить запрос.
Есть две таблицы (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
Подсчёт (count) с условиями
    #39364919
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Подсчёт (count) с условиями
    #39364990
Alexls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Подсчёт (count) с условиями
    #39364999
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mlader,
Добавь запрос с периодами, объедини его с платежами и пользователями, сгруппируй по пользователю и периоду, посчитай количество строк.
...
Рейтинг: 0 / 0
Подсчёт (count) с условиями
    #39365461
Xdredd.vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Подсчёт (count) с условиями
    #39365929
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mlader,

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

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


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