2015-03-05 1 views
1

Возьмите 2 таблицы в качестве входных - Employee и зарплаты, каксделать один запрос на выборку с использованием 2, запросы эксплуатируются на том же столе

Employee   Salary 
ID Name   ID Salary 
1 Anshika   1 1000 
2 Arnav   2 2000 
3 Ishita   3 3000 
4 Iti    4 4000 

выход Дисплей as--

A  I 
3000 7000 

Я написаны 2 запросы as--

mysql> select sum(salary) as sumA from salEmp where id in (select id from nameEmp where name LIKE 'A%'); 

output 

sumA 
3000 

1 строки в наборе (0,00 сек)

mysql> select sum(salary) as sumI from salEmp where id in (select id from nameEmp where name LIKE 'I%'); 

output 

sumI 
7000 

1 строка в наборе (0,01 сек)

Но я хочу написать один запрос, так что я могу требуемый выход, как в вопросе.

Я tried--

mysql> select sum(a.salary) as sumA, sum(b.salary) as sumI 
-> from salEmp a,salEmp b 
-> where a.id in 
->   (select id from nameEmp where name LIKE 'A%') 
-> AND b.id in 
->   (select id from nameEmp where name LIKE 'I%'); 

но вывод в follows--

sumA sumI 
6000 14000 
    1 row in set (0.00 sec) 

значения удваиваются.
PLZ помощь в получении оригинального выхода ...

+0

Это ваш запрос - «Получите общую зарплату работника, чье имя начинается с« А »и чье имя начинается с« Я »? – 1000111

ответ

0

Вы делаете cross join. Таким образом, итоговая таблица получает повторяющиеся значения. Вместо этого вы можете следовать следующий запрос:

SELECT 
    SUM(CASE WHEN ID IN (SELECT ID FROM nameEmp 
         WHERE name Like 'A%') THEN Salary ELSE 0 END) AS sumA, 
    SUM(CASE WHEN ID IN (SELECT ID FROM nameEmp 
         WHERE name Like 'I%') THEN Salary ELSE 0 END) AS sumI 

FROM salEmp 

Вы можете узнать о «случае, когда» здесь, если вы не знакомы с этим.

http://www.java2s.com/Code/SQL/Flow-Control/UseCASEWHENstatementinSELECT.htm

http://dev.mysql.com/doc/refman/5.0/en/case.html

0

Спасибо за помощь !!!. Я нашел еще одно решение проблемы:

select a.sumA, b.sumI from 
(select sum(salary) as sumA from salEmp where id in (select id from nameEmp where name LIKE 'A%')) a, 
(select sum(salary) as sumI from salEmp where id in (select id from nameEmp where name LIKE 'I%')) b; 
Смежные вопросы