SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 01.02.2012 13:39:37

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Вложенный запрос

Подскажите как прописать select запрос -
Вывести из таблицы LLL сумму по полю NS в переменную M1 если mes = 1 и
вывести из таблицы LLL сумму по полю NS в переменную M2 если mes = 2 и т.д.
Спасибо

Отредактированно ladysvet-lana (01.02.2012 13:43:10)

Неактивен

 

#2 01.02.2012 13:55:57

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

Re: Вложенный запрос

Пример таблицы на 5 строк и желаемый результат, а то не ясно о чем идет речь.

Неактивен

 

#3 01.02.2012 15:14:08

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

Например :
Есть таблица LLL

MES (месяц)     NS (сумма)
-----------------------------
   1                    15
   2                    30
   3                    45

а нужно создать :
M1    M2    M3
15     30    45

Неактивен

 

#4 01.02.2012 15:20:49

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

Re: Вложенный запрос

select (select ns where mes = 1) as M1, (select ns where mes = 2) as M2, (select ns where mes = 3) as M3 from LLL;

Только зачем это нужно? Тоже только в профиль.

Неактивен

 

#5 01.02.2012 15:57:29

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

Простите дуру  - Выдает - синтаксис эррор после Where..что это может быть?
А нужно перекачать инфу из одной структуры в другую

Неактивен

 

#6 01.02.2012 16:00:25

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Вложенный запрос

from LLL не там sad

select (select ns from LLL where mes = 1) as M1, (select ns from LLL where mes = 2) as M2, (select ns from LLL where mes = 3) as M3

Неактивен

 

#7 01.02.2012 16:10:40

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

теперь синтаксис эррор в конце строки

Неактивен

 

#8 01.02.2012 16:15:42

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

Нужна еще общая сумма как-то так :
select (select sum(ns) from LLL where mes = 1) as M1,
(select sum(ns) from LLL where mes = 2) as M2,
(select sum(ns) from LLL where mes = 3) as M3
group by  ????

Неактивен

 

#9 01.02.2012 16:19:02

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

Re: Вложенный запрос

select @m1:=(select sum(ns) from LLL where mes = 1) as M1,
@m2:=(select sum(ns) from LLL where mes = 2) as M2,
@m3:=(select sum(ns) from LLL where mes = 3) as M3,
@m1+@m2+@m3 as `общая сумма за 3 месяца`;

Неактивен

 

#10 01.02.2012 17:23:45

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

Не получилось ,но все равно спасибо общая идея понятна

Неактивен

 

#11 01.02.2012 19:08:41

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

Re: Вложенный запрос

Что именно не получилось? Если у вас версия <5 (не поддерживающая пользовательские переменные), то

select
(select sum(ns) from LLL where mes = 1) as M1,
(select sum(ns) from LLL where mes = 2) as M2,
(select sum(ns) from LLL where mes = 3) as M3,
(select sum(ns) from LLL where mes in(1,2,3)) as `сумма за три месяца`;

Неактивен

 

#12 02.02.2012 10:53:32

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

А вот еще мне нужно чуть усложнить)))...
Есть таблица LLL
     MES       NS    TIN       
  месяц   сумма   код
-------------------------------
      1      10,00   123       
      1      10,00   123       
      2      30,00   654       
      2      30,00   456       
      3      45,00   987       
      3      45,00   789       
 
Делаю запрос  и как бы все как нужно  ))):
select  distinct  tin,
(select sum(ns) from LLL where mes = 1) as M1,
(select sum(ns) from LLL where mes = 2) as M2,
(select sum(ns) from LLL where mes = 3) as M3
from LLL

Получаю :
TIN      M1         M2         M3
------------------------------------
123    20,00      60,00      90,00
456    20,00      60,00      90,00
789    20,00      60,00      90,00
654    20,00      60,00      90,00
987    20,00      60,00      90,00

А нужно )))  :

TIN      M1         M2         M3
------------------------------------
123      20,00       0          0
456        0         30.00      0
789        0           0        45.00
654        0         30.00      0
987        0           0       45.00

Неактивен

 

#13 02.02.2012 11:05:24

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

Re: Вложенный запрос

select  distinct  tin,
if(l.mes=1,(select sum(ns) from LLL where mes = 1),0) as M1,
if(l.mes=2,(select sum(ns) from LLL where mes = 2),0) as M2,
if(l.mes=3,(select sum(ns) from LLL where mes = 3),0) as M3
from LLL l

Неактивен

 

#14 02.02.2012 11:17:04

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

Осталось еще немного..)))
Получилось так -
TIN                M1         M2         M3
-------------------------------------------------
123                20          0       0,00
456                 0         60       0,00
789                 0          0      90,00
654                 0         60       0,00
987                 0          0      90,00

т.е задвоились суммы 60 и 90 - должно быть
TIN                M1         M2         M3
-------------------------------------------------
123                20          0       0,00 - тут на одинаковый код суммировалось правильно
456                 0         30       0,00
789                 0          0      45,00
654                 0         30       0,00
987                 0          0      45,00

Неактивен

 

#15 02.02.2012 11:23:16

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

Осталось еще немного..)))
Получилось так -
TIN                M1         M2         M3
-------------------------------------------------
123                20          0       0,00
456                 0         60       0,00
789                 0          0      90,00
654                 0         60       0,00
987                 0          0      90,00

т.е задвоились суммы 60 и 90 - должно быть
TIN                M1         M2         M3
-------------------------------------------------
123                20          0       0,00 - тут на одинаковый код суммировалось правильно
456                 0         30       0,00
789                 0          0      45,00
654                 0         30       0,00
987                 0          0      45,00

Неактивен

 

#16 02.02.2012 11:24:29

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

Re: Вложенный запрос

if(l.mes=1,(select sum(ns) from LLL where mes = 1 and LLL.tin=l.tin),0) as M1,  -- добавляете это условие ко всем подзапросам

Неактивен

 

#17 02.02.2012 11:41:29

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

LLL.tin=l.tin - тут наверно что-то не так?

Неактивен

 

#18 02.02.2012 11:57:03

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

Задолбала я вас...спасибо что столько времени мне уделяете
select  distinct  tin,
if(l.mes=1,(select sum(ns) from LLL where mes = 1 and LLL.tin=l.tin),0) as M1,
if(l.mes=2,(select sum(ns) from LLL where mes = 2 and LLL.tin=l.tin),0) as M2,
if(l.mes=3,(select sum(ns) from LLL where mes = 3 and LLL.tin=l.tin),0) as M3
from LLL l

Сообщение - dataset L doesn't exist

Неактивен

 

#19 02.02.2012 13:32:03

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

Re: Вложенный запрос

ladysvet-lana написал:

Сообщение - dataset L doesn't exist

Сообщение от кого? Вы хоть скрин прикладывайте, а лучше вот так:

mysql> select * from test;
+------+------+------+
| mes  | ns   | tin  |
+------+------+------+
|    1 |   10 |  123 |
|    1 |   10 |  123 |
|    2 |   30 |  654 |
|    2 |   30 |  456 |
|    3 |   45 |  987 |
|    3 |   45 |  789 |
+------+------+------+
6 rows in set (0.00 sec)

mysql> select  distinct  tin,
    -> if(l.mes=1,(select sum(ns) from test where mes = 1 and test.tin=l.tin),0)
 as M1,
    -> if(l.mes=2,(select sum(ns) from test where mes = 2 and test.tin=l.tin),0)
 as M2,
    -> if(l.mes=3,(select sum(ns) from test where mes = 3 and test.tin=l.tin),0)
 as M3
    -> from test l;
+------+------+------+------+
| tin  | M1   | M2   | M3   |
+------+------+------+------+
|  123 |   20 |    0 |    0 |
|  654 |    0 |   30 |    0 |
|  456 |    0 |   30 |    0 |
|  987 |    0 |    0 |   45 |
|  789 |    0 |    0 |   45 |
+------+------+------+------+
5 rows in set (0.02 sec)

Неактивен

 

#20 03.02.2012 12:28:07

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

(((((((((((

Неактивен

 

#21 03.02.2012 12:30:43

ladysvet-lana
Участник
Зарегистрирован: 01.02.2012
Сообщений: 14

Re: Вложенный запрос

mysql> select  distinct  tin,
    -> if(l.mes=1,(select sum(ns) from test where mes = 1 and test.tin=l.tin),0)
as M1,
    -> if(l.mes=2,(select sum(ns) from test where mes = 2 and test.tin=l.tin),0)
as M2,
    -> if(l.mes=3,(select sum(ns) from test where mes = 3 and test.tin=l.tin),0)
as M3
    -> from test l;

   X      DataSet L  doesn't exist .

Неактивен

 

#22 03.02.2012 16:20:17

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

Re: Вложенный запрос

"   X      DataSet L  doesn't exist ."  Кто пишет? Приложите скрин.

Неактивен

 

Board footer

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