SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.02.2012 00:25:05

tdrive
Участник
Зарегистрирован: 16.02.2012
Сообщений: 7

как сделать такой запрос

есть таблица приблизительно выглядит вот так:

name        type        value
name1      type1       4
name1      type2       1
name1      type3       7
name2      type1       5
name2      type2       1
name2      type3       6
name3      type1       4
name3      type2       3
name3      type3       7
name4      type1       5
name4      type2       1
name4      type3       7

нужно составить запрос что бы в результате получилось
name1      12
name2      12
name3      14
name4      13

числа это сумма значений value для type1 type2 type3

как это можно сделать одним запросом и можно ли?

Неактивен

 

#2 16.02.2012 00:27:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: как сделать такой запрос

SELECT `name`, sum(`value`) FROM `t` GROUP BY `name` ORDER BY `name` ASC

Отредактированно deadka (16.02.2012 00:33:10)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 16.02.2012 00:32:35

tdrive
Участник
Зарегистрирован: 16.02.2012
Сообщений: 7

Re: как сделать такой запрос

deadka написал:

SELECT `name`, sum(`type`) FROM `t` GROUP BY `name` ORDER BY `name` ASC

так sum нужно не type а value

Неактивен

 

#4 16.02.2012 00:34:45

tdrive
Участник
Зарегистрирован: 16.02.2012
Сообщений: 7

Re: как сделать такой запрос

а всё понял спасибо.

Неактивен

 

#5 16.02.2012 00:35:28

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: как сделать такой запрос

Да, поправил запрос. Правда все type'ы будут учтены в счете, то есть если есть еще другие type4, type5 и так далее, то и они посчитаются. Чтобы они не считались, можно так:

SELECT `name`, sum(`value`) FROM `t` WHERE `type` in ('type1', 'type2', 'type3') GROUP BY `name` ORDER BY `name` ASC;

Отредактированно deadka (16.02.2012 00:44:04)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 16.02.2012 00:38:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: как сделать такой запрос

Только, наверное,  не "not in", а просто "in"

Неактивен

 

#7 16.02.2012 00:44:18

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: как сделать такой запрос

Да, Вы правы, просто in, пора мне спать sad.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#8 16.02.2012 01:30:33

tdrive
Участник
Зарегистрирован: 16.02.2012
Сообщений: 7

Re: как сделать такой запрос

deadka написал:

Да, поправил запрос. Правда все type'ы будут учтены в счете, то есть если есть еще другие type4, type5 и так далее, то и они посчитаются. Чтобы они не считались, можно так:

SELECT `name`, sum(`value`) FROM `t` WHERE `type` in ('type1', 'type2', 'type3') GROUP BY `name` ORDER BY `name` ASC;

о а я сделал where `type` = 'type1' ||  `type` = 'type2' || `type` = 'type3'

с in намного симпатичнее спс за подсказку

Неактивен

 

#9 19.02.2012 18:25:46

tdrive
Участник
Зарегистрирован: 16.02.2012
Сообщений: 7

Re: как сделать такой запрос

продолжение темы)
та же бд но теперь нужно что бы запрос выдавал 2 столбца
name value

где value это сумма значений value для type1 type2 type3 но value от type3 нужно поделить на 10.


по таблицы из первого поста должно получиться
name1      5,7
name2      6,6
name3      7,7
name4      6,7

или такие вещи лучше делать в несколько запросов а арифметику в программе?

Неактивен

 

#10 19.02.2012 18:42:32

tdrive
Участник
Зарегистрирован: 16.02.2012
Сообщений: 7

Re: как сделать такой запрос

и ещё вопрос, посоветуйте хорошую книгу где рассказывают именно про составление сложных запросов, оптимизацию таблиц.
а то везде только основы и историю sql разжёвывают.

Неактивен

 

#11 19.02.2012 19:47:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: как сделать такой запрос

select `name`, sum(`value`) from
(SELECT `name`, sum(`value`) `value` FROM `t` WHERE `type` in ('type1', 'type2') GROUP BY `name` ORDER BY null
union all
SELECT `name`, sum(`value`)/10 FROM `t` WHERE `type` ='type3' GROUP BY `name` ORDER BY null) t
GROUP BY `name` ORDER BY `name` ASC;

Неактивен

 

#12 19.02.2012 19:50:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: как сделать такой запрос

tdrive написал:

и ещё вопрос, посоветуйте хорошую книгу где рассказывают именно про составление сложных запросов, оптимизацию таблиц.
а то везде только основы и историю sql разжёвывают.

http://sqlinfo.ru/forum/viewtopic.php?id=4458

Неактивен

 

#13 19.02.2012 20:55:34

tdrive
Участник
Зарегистрирован: 16.02.2012
Сообщений: 7

Re: как сделать такой запрос

большое спасибо

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson