[Решено] Помогите написать запрос

Тема в разделе "Базы Данных", создана пользователем AlexGood, 24 май 2017.

Статус темы:
Закрыта.
  1. AlexGood

    AlexGood

    Регистрация:
    28 ноя 2016
    Сообщения:
    254
    Симпатии:
    7
    Необходимо написать запрос, который выберет клиентов, у которых больше 4 заказов имеют статус "Complete".

    Статус комплит написал это:

    SELECT * FROM orders WHERE status='Complete';

    а как совместить с "больше 4 заказов?"

    ниже приведен mysql:

    Код:
    CREATE TABLE IF NOT EXISTS `clients` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(256) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;
    
    INSERT INTO `clients` (`id`, `name`) VALUES
    (1, 'Виктор'),
    (2, 'Семен'),
    (3, 'Август');
    
    CREATE TABLE IF NOT EXISTS `orders` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `client` int(11) NOT NULL,
      `status` enum('Complete','Pending','Canceled','') NOT NULL DEFAULT 'Pending',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=13 ;
    
    INSERT INTO `orders` (`id`, `client`, `status`) VALUES
    (1, 2, 'Pending'),
    (2, 1, 'Complete'),
    (3, 2, 'Complete'),
    (4, 3, 'Canceled'),
    (5, 2, 'Complete'),
    (6, 1, 'Complete'),
    (7, 1, 'Pending'),
    (8, 1, 'Pending'),
    (9, 2, 'Complete'),
    (10, 2, 'Complete'),
    (11, 1, 'Complete'),
    (12, 2, 'Complete');
    
     
  2. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.558
    Симпатии:
    1.472
    Код:
    SELECT
      c.*
    FROM clients AS c
    INNER JOIN orders AS o ON c.id = o.client
    WHERE status = 'Complete'
    GROUP BY c.id
    HAVING COUNT(c.id) > 4
    вот так
     
    AlexGood нравится это.
  3. AlexGood

    AlexGood

    Регистрация:
    28 ноя 2016
    Сообщения:
    254
    Симпатии:
    7
    не все правда ясно для меня, так как я в основном самые элементарные писал (можно с комментами? :Smile:)
    но по итогу все как положено http://joxi.ru/nAy8VEEfY4YEX2
     
  4. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.558
    Симпатии:
    1.472
    ну, всё просто на самом делел.

    Вам нужны клиенты которые значит выборку начинаем с таблицы клиентов. Далее, вам нужно узнать про статус заказов, значит объеденяем таблицу клиентов и таблицу заказов.
    Добавляем условие, по которому нужно применить фильтр
    После того как вы сделаете INNER JOIN у вас будет в выборке не одна строка а столько, сколько заказов у этого клиента, поэтому нужно сделать GROUP BY чтобы выбрать уникальных пользователей
    и Having'ом создаём дополнительное условие, по которому будут выбираеться только нужные нам записи, т.е. где кол-во c.id > 4.
     
    AlexGood нравится это.
  5. AlexGood

    AlexGood

    Регистрация:
    28 ноя 2016
    Сообщения:
    254
    Симпатии:
    7
    $iD,вам бы преподавать :Good:
     
Статус темы:
Закрыта.