|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Есть две таблицы Структура таблицы dohod2005: +----------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | | auto_increment | | INN | char(13) | NO | | | | | NameORG | char(20) | NO | | | | | ID_D2005 | int(11) | NO | | | | | NameRab | char(25) | NO | | | | +----------+----------+------+-----+---------+----------------+ Структура таблицы dohmes: +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | ID_D2005 | int(11) | NO | | | | | nommes | char(2) | NO | | 01 | | | summes | int(11) | NO | | | | | koddoh | int(11) | NO | | | | +----------+--------------+------+-----+---------+----------------+ ID_D2005 - поле связи с таблицей dohod2005; dohod2005 +----+--------------+-------------+----------+---------------+ | ID | INN | NameORG | ID_D2005 | NameRab | +----+--------------+-------------+----------+---------------+ | 1 | 7107547812 | Perspectiva | 7223 | Peterson | | 2 | 7107547812 | Perspectiva | 7226 | Jaramush | | 3 | 7107547812 | Perspectiva | 7231 | Sabler | | 4 | 45623411225 | BlackNoise | 7267 | Peterson | | 5 | 45623411225 | BlackNoise | 8001 | Karlson | | 6 | 45623411225 | BlackNoise | 8011 | Svenson | | 7 | 45623411225 | BlackNoise | 8061 | Shneerson | | 8 | 680987345515 | Modos | 1002 | Navuhodonosor | | 9 | 680987345515 | Modos | 1012 | Plumkin | | 10 | 680987345515 | Modos | 1014 | Solomonson | | 11 | 680987345515 | Modos | 1035 | Shulmanson | +----+--------------+-------------+----------+---------------+ dohmes summes полученная сумма, koddoh - код дохода: 2000 - зарплата, 2200-премия, 2500-мат.помощь. +----+----------+--------+--------+--------+ | ID | ID_D2005 | nommes | summes | koddoh | +----+----------+--------+--------+--------+ | 1 | 7223 | 01 | 1000 | 2000 | | 2 | 7223 | 02 | 1100 | 2000 | | 3 | 7231 | 03 | 1200 | 2000 | | 4 | 7231 | 03 | 200 | 2200 | | 5 | 7267 | 04 | 1300 | 2000 | | 6 | 7267 | 05 | 1400 | 2000 | | 7 | 7226 | 01 | 500 | 2000 | | 8 | 7226 | 02 | 600 | 2000 | | 9 | 8001 | 03 | 700 | 2500 | | 10 | 1012 | 04 | 800 | 2000 | | 11 | 1012 | 05 | 900 | 2000 | | 12 | 8011 | 08 | 2900 | 2000 | | 13 | 8011 | 02 | 2800 | 2000 | | 14 | 1002 | 02 | 290 | 2000 | | 15 | 1002 | 05 | 190 | 2000 | | 16 | 1014 | 02 | 1200 | 2000 | | 17 | 1014 | 03 | 1400 | 2000 | | 18 | 1014 | 04 | 1600 | 2000 | | 19 | 1014 | 06 | 1800 | 2000 | | 20 | 1035 | 07 | 1800 | 2200 | +----+----------+--------+--------+--------+ Создайте следующие запросы: Определите суммарную заработную плату каждого работника SELECT A.NameORG, A.NameRab, IF(koddoh=2000, SUM(B.Summes), Null) as sumall FROM dohod2005 as A LEFT JOIN dohmes as B ON A.ID_D2005=B.ID_D2005 GROUP BY A.ID_D2005 ORDER BY A.NameORG; ошибка в запросе зарплата Sabler считается как 1400 почему плюсуются 200р премиальных незнаю. Найти всех работников ни разу не получивших зарплату: SELECT A.NameRab FROM dohod2005 as A LEFT JOIN dohmes as B ON A.ID_D2005=B.ID_D2005 WHERE NOT ((A.ID_D2005=B.ID_D2005) AND (koddoh=2000) AND (summes>0)) ORDER BY A.NameRab; ошибка запрос не работает вместо Shneerson выдаёт Sabler ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 07:58 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Relect, Код создания двух таблиц Create database UserLogin; USE UserLogin; Create table dohod2005 (ID int(11) auto_increment primary key not null, INN char(13) not null, NameORG char(20) not null, ID_D2005 int(11) not null, NameRab char(25) not null); Create table dohmes (ID int(11) auto_increment primary key, ID_D2005 int(11) not null, Nommes char(2) default ‘01’ not null, Summes int(11) not null, Koddoh int(11) not null); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (1,’7107547812’,’Perspectiva’, 7223,’Peterson’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (2,’7107547812’,’Perspectiva’, 7226,’Jaramush’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (3,’7107547812’,’Perspectiva’, 7231,’Sabler’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (4,’45623411225’,’BlackNoise’, 7267,’Peterson’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (5,’45623411225’,’BlackNoise’, 8001,’Karlson’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (6,’45623411225’,’BlackNoise’, 8011,’Svenson’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (7,’45623411225’,’BlackNoise’, 8061,’Shneerson’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (8,’680987345515’,’Modos’, 1002,’Navuhodonosor’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (9,’680987345515’,’Modos’, 1012,’Plumkin’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (10,’680987345515’,’Modos’, 1014,’Solomonson’); Insert dohod2005(ID, INN, NameORG, ID_D2005, NameRab) values (11,’680987345515’,’Modos’, 1035,’Shulmanson’); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (1,7223,’01’,1000,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (2,7223,’02’,1100,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (3,7231,’03’,1200,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (4,7231,’03’,200,2200); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (5,7267,’04’,1300,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (6,7267,’05’,1400,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (7,7226,’01’,500,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (8,7226,’02’,600,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (9,8001,’03’,700,2500); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (10,1012,’04’,800,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (11,1012,’05’,900,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (12,8011,’08’,2900,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (13,8011,’02’,2800,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (14,1002,’02’,290,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (15,1002,’05’,190,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (16,1014,’02’,1200,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (17,1014,’03’,1400,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (18,1014,’04’,1600,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (19,1014,’06’,1800,2000); Insert dohmes(ID, ID_D2005, nommes, summes, koddoh) values (20,1035,’07’,1800,2200); ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 08:13 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 08:36 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Akina, со вторым запросом неправельно WHERE B.ID_D2005 IS NULL -- нет связанных записей. Cвязанные записи могут быть, по koddoh может быть 2200 премия, или 2500 - мат.помощь. В первом не отображены значения Null. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 08:45 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Akina, SELECT A.NameORG, A.NameRab, IF(koddoh=2000, SUM(B.Summes), Null) as sumall FROM dohod2005 as A LEFT JOIN dohmes as B ON A.ID_D2005=B.ID_D2005 GROUP BY A.ID_D2005 ORDER BY A.NameORG; вот весь запрос работает верно, нули выводит, одного не пойму почему Sabler считает 1400 вместо 1200, то есть прибавляет 200р из koddoh=2200(премия). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 10:00 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Да не вопрос... fiddle . ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 10:01 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Relect весь запрос работает верно ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 10:03 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Akina Relect весь запрос работает верно Код: sql 1. 2. 3. 4. 5. 6. 7.
работает. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
работает, а как удалось вывести null? Большое спасибо. А можете ещё составить запрос: Найти все организации в которых не менее 50% работников получали в течении не менее чем 2-х месяцев зарплату не более 1000 рублей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 10:52 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Relect как удалось вывести null? Relect А можете ещё составить запрос: Запрос-то попроще предыдущих будет, пусть и длиннее. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 11:50 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Akina Relect как удалось вывести null? Relect А можете ещё составить запрос: Запрос-то попроще предыдущих будет, пусть и длиннее. да нет это тест для аттестации инвалидов по mysql/ Ну начать запрос стоит так SELECT * FROM dohod2005 as A LEFT JOIN dohmes as B ON A.ID_D2005=B.ID_D2005 а как дальше делать выборку я не пойму чтобы не уменьшалось количество работников, для дальнейшего сравнения >50? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2020, 11:47 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Akina Relect как удалось вывести null? Relect А можете ещё составить запрос: Запрос-то попроще предыдущих будет, пусть и длиннее. Определите в каждой организации работника получившего наибольшую суммарную заработную плату за весь период работы. Код: sql 1. 2. 3. 4. 5. 6.
Вопрос как из этого запроса выбрать максимальные и отсеять нули? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2020, 12:47 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Akina Relect как удалось вывести null? Relect А можете ещё составить запрос: Запрос-то попроще предыдущих будет, пусть и длиннее. Найти все организации в которых не менее 50% работников получали в течении не менее чем 2-х месяцев зарплату не более 1000 рублей. SELECT NameORG FROM dohod2005 as T1 GROUP BY NameORG HAVING count(*) <= (SELECT 2*count(*) FROM dohod2005 WHERE ID_D2005 IN (SELECT ID_D2005 FROM dohmes WHERE (summes<=1000) AND (koddoh=2000) GROUP BY ID_D2005 HAVING count(*)>1) AND NameORG = T1.NameORG GROUP BY NameORG); ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2020, 11:16 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
[quot Akina#22106222] Relect как удалось вывести null? Определите в каждой организации работника получившего наибольшую суммарную заработную плату за весь период работы. Select A.NameORG, A.NameRab, B.MAX(summax) FROM dohod2005 as A LEFT JOIN (Select ID_D2005, SUM(summes) as summax FROM dohmes WHERE koddoh=2000 GROUP BY ID_D2005) as B ON A.ID_D2005 IN=B. ID_D2005 GROUP BY A.NameORG ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2020, 09:05 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Определить в каждой организации работника получившего наибольшую суммарную заработную плату за весь период работы. Код: sql 1. 2. 3. 4. 5. 6. 7.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=B. ID_D2005 GROUP BY A.NameORG LIMIT 0, 30' at line 4 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2020, 09:06 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Relect Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2020, 10:21 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
miksoft Relect Код: sql 1.
Определите в каждой организации работника получившего наибольшую суммарную заработную плату за весь период работы. Код: sql 1. 2. 3. 4. 5.
теперь работает, но неверно выводит A.NameRab ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2020, 13:17 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Akina Relect как удалось вывести null? Relect А можете ещё составить запрос: Запрос-то попроще предыдущих будет, пусть и длиннее. C этим запросом разобрался: Найти все организации в которых не менее 50% работников получали в течении не менее чем 2-х месяцев зарплату не более 1000 рублей: Код: sql 1. 2. 3. 4. 5. 6.
А вот как получить запрос: Определите в каждой организации работника получившего наибольшую суммарную заработную плату за весь период работы: Код: sql 1. 2. 3. 4. 5. 6. 7.
ошибка #1248 - Every derived table must have its own alias ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 08:27 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Relect Код: sql 1.
Relect Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 13:52 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
miksoft Relect Код: sql 1.
Relect Код: sql 1.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
ошибка таже: #1248 - Every derived table must have its own alias, условие соединение указано ON A.ID_D2005=B.ID_D2005 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 14:40 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Relect Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
И соответственно условие связывания после алиаса... косоватенькое. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 15:49 |
|
сложные запросы используя связи двух таблиц
|
|||
---|---|---|---|
#18+
Akina, ВСЁ! Заработало! Спасибо. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 16:58 |
|
|
start [/forum/topic.php?fid=47&tid=1828663]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 540ms |
0 / 0 |