Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / запрос к таблице(count, sum) / 13 сообщений из 13, страница 1 из 1
16.06.2019, 18:41
    #39826983
qrp18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
всем привет!

у меня есть такая таблица:
авторcreate table main (x date, y int, z char);
insert into main values('20190301', 3, 'c');
insert into main values('20190310', 7, 'a');
insert into main values('20190320', 9, 'a');
insert into main values('20190402', 11, 'a');
insert into main values('20190411', 4, 'a');
insert into main values('20190411', 5, 'a');
insert into main values('20190415', 5, 'b');
insert into main values('20190421', 9, 'a');
insert into main values('20190421', 10, 'b');
insert into main values('20190421', 5, 'a');
insert into main values('20190428', 15, 'a');
insert into main values('20190501', 7, 'b');

select x,y,z from main;


есть к ней параметры на вход: две даты(20190401, 20190430) и значение 'a'
по этим параметрам хотелось бы написать селект к таблице, который бы вывел по выборке:
1. количество дней, по которым есть записи(параметр x): 4
2. количество записей: 8
3. сумму параметра z по всем записям: 65
4. последний день, в который есть запись(параметр x): '20190428'

p.s. задача выглядит просто, но я не совсем понимаю, эта задача сложная или простая(в случае, если сложная, не знаю, насколько правильно ее сюда выкладывать и просить её решить), но сам с ней сижу сегодня полдня, у меня не получается пока ее сделать.
...
Рейтинг: 0 / 0
16.06.2019, 18:57
    #39826985
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
qrp181. количество дней, по которым есть записи(параметр x): 4
2. количество записей: 8
3. сумму параметра z по всем записям: 65
4. последний день, в который есть запись(параметр x): '20190428'



ну вы сформулируйте условие выборки то и сразу будет понятнее
...
Рейтинг: 0 / 0
16.06.2019, 19:00
    #39826987
qrp18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
PizzaPizza,
sorry, похоже, криво написал.
условие выборки:
main.x >= '20190401'
main.x <= '20190430'
main.z = 'a'
...
Рейтинг: 0 / 0
16.06.2019, 19:13
    #39826989
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
ну и что мешает прикрутить

qrp181. количество дней, по которым есть записи(параметр x): 4
2. количество записей: 8
3. сумму параметра z по всем записям: 65
4. последний день, в который есть запись(параметр x): '20190428'

количество уникальных x
количество x
сумму z
максимальный x
?
...
Рейтинг: 0 / 0
16.06.2019, 19:19
    #39826990
qrp18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
PizzaPizza,

именно так
...
Рейтинг: 0 / 0
16.06.2019, 19:30
    #39826993
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
И?

Задача - простая. Просить решить - странно. Если пока не получается, то читайте синтаксис операторов, которые выполняют ваши задачи, синтаксис запросов в целом если не понятно куда условия, а куда что писать. Смотрите примеры, в частности агрегатных функций.
...
Рейтинг: 0 / 0
16.06.2019, 19:33
    #39826994
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
https://rextester.com/MLNZ29756

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare @st date ='20190401'
declare @en date ='20190430'
declare @z char = 'a'
declare @t table (x date, y int, z char)
insert into @t(x,y,z) values
('20190301', 3, 'c'),
('20190310', 7, 'a'),
('20190320', 9, 'a'),
('20190402', 11, 'a'),
('20190411', 4, 'a'),
('20190411', 5, 'a'),
('20190415', 5, 'b'),
('20190421', 9, 'a'),
('20190421', 10, 'b'),
('20190421', 5, 'a'),
('20190428', 15, 'a'),
('20190501', 7, 'b')
select count(1)n,max(x)mx,sum(y)sm,sum(case z when @z then 1 end)pr
from @t where x>=@st and x<=@en
...
Рейтинг: 0 / 0
16.06.2019, 19:37
    #39826995
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
пропустил count(distinct x)m..
https://rextester.com/KKVC19161
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare @st date ='20190401'
declare @en date ='20190430'
declare @z char = 'a'
declare @t table (x date, y int, z char)
insert into @t(x,y,z) values
('20190301', 3, 'c'),
('20190310', 7, 'a'),
('20190320', 9, 'a'),
('20190402', 11, 'a'),
('20190411', 4, 'a'),
('20190411', 5, 'a'),
('20190415', 5, 'b'),
('20190421', 9, 'a'),
('20190421', 10, 'b'),
('20190421', 5, 'a'),
('20190428', 15, 'a'),
('20190501', 7, 'b')
select count(distinct x)m,count(1)n,max(x)mx,sum(y)sm,sum(case z when @z then 1 end)pr
from @t where x>=@st and x<=@en
...
Рейтинг: 0 / 0
16.06.2019, 19:42
    #39826997
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
ну или ..count(distinct case z when @z then x end)ff .. в зависимости от условий если нужно считать даты только с 'a'
...
Рейтинг: 0 / 0
16.06.2019, 20:51
    #39827006
qrp18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
vikkivну или ..count(distinct case z when @z then x end)ff .. в зависимости от условий если нужно считать даты только с 'a'

спасибо, то что надо :)

а если параметр 'a' задается в виде таблицы
авторdeclare @tz table (z char)
insert into @tz(z) values
('a'),
('b')

, то как правильно написать условие можете сказать?
или в таком случае все будет совсем по другому, т.к. надо будет к этой таблице джоином присоединять первую таблицу?
(на выходе тогда первым значением пойдет значение параметра 'z')
...
Рейтинг: 0 / 0
16.06.2019, 20:56
    #39827007
qrp18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
PizzaPizza,

позиция понятна, но по поводу простоты я спросил к другому.
> простую задачу, решение которой занимает мало времени, попросить помочь решить не зазорно
> сложную задачу, решение которой у специалистов занимает много часов, или даже дней просить сделать за тебя некрасиво.

поэтому, если задача специалистом видится несложной, то я ок.
сам над ней думал, не решил.. бывает. но я и не специалист.. спустя полгода-год может быть стану.
...
Рейтинг: 0 / 0
16.06.2019, 22:10
    #39827023
qrp18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
vikkiv,

покрутил, вроде так получается: https://rextester.com/QUKW5505
вроде, то что хотел.
спасибо еще раз
...
Рейтинг: 0 / 0
16.06.2019, 22:19
    #39827027
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос к таблице(count, sum)
неявные преобразования - отстой
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / запрос к таблице(count, sum) / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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