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

Откуда:
Сообщений: 148
Допусти есть такая табличка:
Имя Ответ Правильный Ответ
Вася 1 2
Вася 2 2
Вася 1 3
Петя 2 1
Петя 0 2
Никита 1 1

Требуется сделать выборку вида:
Имя,Всего ответов, Сколько совпало,Сколько несовпало.
В принципе можно сделать так:
Declare @tmp table (Name nvarchar(255),cnt INT,field)

Insert @tmp
Select Name,Count(Otvet),'Всего' from table
Group by Name
Insert @tmp
Select Name,Count(Otvet),'Неверно' from table
Where otvet!=prav
Group by Name
Insert @tmp
Select Name,Count(Otvet),'Верно' from table
Where otvet=prav
Group by Name

Но я думаю, что это как-то красивее сделать можно.
22 май 14, 22:31    [16058385]     Ответить | Цитировать Сообщить модератору
 Re: Составить запрос  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
iluxa1810,
declare @t table(nm varchar(6),a int,r int)
insert @t values('Vasya',1,2),('Vasya',2,2),('Vasya',1,3),('Petya',2,1),('Petya',0,2),('Nikita',1,1)
select distinct nm,
	count(a)over(partition by nm)'total',
	sum(iif(a=r,1,0))over(partition by nm)'ok',
	sum(iif(a!=r,1,0))over(partition by nm)'fail'
from @t
22 май 14, 22:58    [16058477]     Ответить | Цитировать Сообщить модератору
 Re: Составить запрос  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
vikkiv,

Ты и дальше будешь троллить этот бред с distinct + over
Так до бана недалеко.
22 май 14, 23:09    [16058525]     Ответить | Цитировать Сообщить модератору
 Re: Составить запрос  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
Mnior, Так во первых написано
как-то красивее сделать можно
, о производительности в тексте нигде нет приоритета, да и красота понятие субъективное. А во вторых про баны кое-кто недорос, к чему ядом всё вокруг поливать-то, да ещё и без альтернатив решения (лучшего/покрасивее), по существу надо, а если клинит то во разделе флуда обсужения.
22 май 14, 23:17    [16058556]     Ответить | Цитировать Сообщить модератору
 Re: Составить запрос  [new]
iluxa1810
Member

Откуда:
Сообщений: 148
vikkiv
Mnior, Так во первых написано
как-то красивее сделать можно
, о производительности в тексте нигде нет приоритета, да и красота понятие субъективное. А во вторых про баны кое-кто недорос, к чему ядом всё вокруг поливать-то, да ещё и без альтернатив решения (лучшего/покрасивее), по существу надо, а если клинит то во разделе флуда обсужения.

Если твое решение очень ресурсоемко, то проще воспользоваться моим многоступенчатым зпросом.
Меня интересует решение, в котором больше профита.
23 май 14, 00:17    [16058786]     Ответить | Цитировать Сообщить модератору
 Re: Составить запрос  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
iluxa1810, Твоё решение пока вертикально, можно сделать по той-же модели но горизонтально, например так (в смысле добавить к тому что у меня выше)
select x.nm,x.total,isnull(y.ok,0)'ok',x.total-isnull(y.ok,0)'fail'from
(select nm,count(1)'total' from @t group by nm)x left join
(select nm,count(1)'ok' from @t where a=r group by nm)y on x.nm=y.nm
23 май 14, 00:46    [16058882]     Ответить | Цитировать Сообщить модератору
 Re: Составить запрос  [new]
Добрый Э - Эх
Guest
iluxa1810,

как вариант - почитать про расширенные группировки, a-la group by with rollup / group by with cube
23 май 14, 04:55    [16059086]     Ответить | Цитировать Сообщить модератору
 Re: Составить запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
select
  Name,
  count(*),
  count(case Otvet = Prav then 1 end), 
  count(case Otvet <> Prav then 1 end)
from
 table
group by
 Name;
23 май 14, 08:54    [16059277]     Ответить | Цитировать Сообщить модератору
 Re: Составить запрос  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
vikkiv
о производительности в тексте нигде нет приоритета, да и красота понятие субъективное
Оно-то субъективное в общем случае, но в конкретном distinct + over как ни крути извращение больного ума с любой точки зрения.
А во вторых, не надо придираться, красиво имеется ввиду эффективно, а не лишь бы потроллить.
23 май 14, 09:40    [16059468]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить