За последние 24 часа нас посетили 22058 программистов и 1114 роботов. Сейчас ищет 751 программист ...

Сложный sql запрос

Тема в разделе "MySQL", создана пользователем Geebrox, 24 ноя 2019.

Метки:
  1. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Всем привет. Я не давно начал изучать SQL. Мне дали задание: сделать запрос в таблицу. Но никак не получается, мало опыта ещё. Прощу вас помочь с этим запросом.

    Таблица (для пример):

    PHP:
    1. create table staff(
    2.     staff_surname varchar(20),
    3.         staff_other_name varchar(20),
    4.         staff_number varchar(5),
    5.         section_number int(3),
    6.         sex varchar(1),
    7.         years_of_employment int(2),
    8.         salary int(6),
    9.         primary key(staff_number)
    10.         );
    11.  
    12. insert into staff values("Mary", "Jane", "C9856", 001, "F", 01, 26000);
    13. insert into staff values("Michael", "Jordan", "D3147", 003, "M", 01, 30000);
    14. insert into staff values("Ivy", "May", "G4387", 002, "F", 04, 30000);
    15. insert into staff values("Alan", "Smith", "K1244", 001, "M", 07, 91000);
    16. insert into staff values('Austin Stone', 'M6874', 004 'M' 01, 30000);
    17. insert into staff values("Elsa", "Wood", "N1239", 004, "F", 06, 50000);
    18. insert into staff values("Cindy", "Cash", "P8435", 005, "F", 01, 22000);
    19. insert into staff values("Linda", "Ruth", "A3398", 002, "F", 02, 46000);
    20. insert into staff values("Luke", "Kyle", "Y5551", 002, "M", 04, 30000);
    21. insert into staff values("Paul", "Lane", "U9211", 005, "M", 05, 68000);
    нужно сделать запрос, чтобы результат был таким (данные могут отличаться):
    [​IMG]

    Как сделать такой запрос? Заранее спасибо за помощь!
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    недавно — пишется слитно

    Тут вся сложность в том, чтобы исправить ошибки в твоих исходных данных: пропущенные запятые, не то количество колонок, отстутсвующие кавычки где они нужны. Будь добр, вбей это вот всё чтобы оно заработало без ошибок в https://www.db-fiddle.com/ и тогда может быть получишь готовый ответ.
    --- Добавлено ---
    А так, вообще ничего сложного:
    Код (SQL):
    1. SELECT `f1`, `f2`, SUM(`f3`)
    2. FROM `t`
    3. GROUP BY `f1`, `f2` WITH ROLLUP
    .
     
    Roman __construct и Geebrox нравится это.
  3. Geebrox

    Geebrox Активный пользователь

    С нами с:
    30 июл 2016
    Сообщения:
    24
    Симпатии:
    1
    Спасибо большое, прощу прощение за ошибки.

    Поправленный код:
    PHP:
    1. create table staff(
    2.     staff_surname varchar(20),
    3.     staff_other_name varchar(20),
    4.     staff_number varchar(5),
    5.     section_number int(3),
    6.     sex varchar(1),
    7.     years_of_employment int(2),
    8.     salary int(6),
    9.     primary key(staff_number)
    10. );
    11.  
    12. insert into staff values('Mary', 'Jane', 'C9856', 1, 'F', 1, 26000);
    13. insert into staff values('Michael', 'Jordan', 'D3147', 3, 'M', 1, 30000);
    14. insert into staff values('Ivy', 'May', 'G4387', 2, 'F', 4, 30000);
    15. insert into staff values('Alan', 'Smith', 'K1244', 1, 'M', 7, 91000);
    16. insert into staff values('Austin', 'Stone', 'M6874', 4, 'M', 1, 30000);
    17. insert into staff values('Elsa', 'Wood', 'N1239', 4, 'F', 6, 50000);
    18. insert into staff values('Cindy', 'Cash', 'P8435', 5, 'F', 1, 22000);
    19. insert into staff values('Linda', 'Ruth', 'A3398', 2, 'F', 2, 46000);
    20. insert into staff values('Luke', 'Kyle', 'Y5551', 2, 'M', 4, 30000);
    21. insert into staff values('Paul', 'Lane', 'U9211', 5, 'M', 5, 68000);
    Ответ (спасибо artoodetoo):
    PHP:
    1. SELECT section_number, sex, sum(salary)
    2. FROM staff
    3. GROUP BY section_number, sex WITH ROLLUP;
     
    #3 Geebrox, 24 ноя 2019
    Последнее редактирование: 24 ноя 2019
    Roman __construct нравится это.