Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 запрос к таблице(count, sum)  [new]
qrp18
Member

Откуда:
Сообщений: 6
всем привет!

у меня есть такая таблица:
автор
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. задача выглядит просто, но я не совсем понимаю, эта задача сложная или простая(в случае, если сложная, не знаю, насколько правильно ее сюда выкладывать и просить её решить), но сам с ней сижу сегодня полдня, у меня не получается пока ее сделать.
16 июн 19, 18:41    [21909339]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
PizzaPizza
Member

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



ну вы сформулируйте условие выборки то и сразу будет понятнее
16 июн 19, 18:57    [21909341]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
qrp18
Member

Откуда:
Сообщений: 6
PizzaPizza,
sorry, похоже, криво написал.
условие выборки:
main.x >= '20190401'
main.x <= '20190430'
main.z = 'a'
16 июн 19, 19:00    [21909343]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
ну и что мешает прикрутить

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


количество уникальных x
количество x
сумму z
максимальный x
?
16 июн 19, 19:13    [21909345]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
qrp18
Member

Откуда:
Сообщений: 6
PizzaPizza,

именно так
16 июн 19, 19:19    [21909346]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
И?

Задача - простая. Просить решить - странно. Если пока не получается, то читайте синтаксис операторов, которые выполняют ваши задачи, синтаксис запросов в целом если не понятно куда условия, а куда что писать. Смотрите примеры, в частности агрегатных функций.
16 июн 19, 19:30    [21909349]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
vikkiv
Member

Откуда: London
Сообщений: 2628
https://rextester.com/MLNZ29756

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
16 июн 19, 19:33    [21909350]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
vikkiv
Member

Откуда: London
Сообщений: 2628
пропустил count(distinct x)m..
https://rextester.com/KKVC19161
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
16 июн 19, 19:37    [21909351]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
vikkiv
Member

Откуда: London
Сообщений: 2628
ну или ..count(distinct case z when @z then x end)ff .. в зависимости от условий если нужно считать даты только с 'a'
16 июн 19, 19:42    [21909353]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
qrp18
Member

Откуда:
Сообщений: 6
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')
16 июн 19, 20:51    [21909365]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
qrp18
Member

Откуда:
Сообщений: 6
PizzaPizza,

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

поэтому, если задача специалистом видится несложной, то я ок.
сам над ней думал, не решил.. бывает. но я и не специалист.. спустя полгода-год может быть стану.
16 июн 19, 20:56    [21909366]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
qrp18
Member

Откуда:
Сообщений: 6
vikkiv,

покрутил, вроде так получается: https://rextester.com/QUKW5505
вроде, то что хотел.
спасибо еще раз
16 июн 19, 22:10    [21909387]     Ответить | Цитировать Сообщить модератору
 Re: запрос к таблице(count, sum)  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 53770
неявные преобразования - отстой
16 июн 19, 22:19    [21909392]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить