Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по вложенным запросам.
|
|||
|---|---|---|---|
|
#18+
Помогите, пожалуйста, решить задачку. Есть 2 таблицы: Shippers - данные об отправителе и Orders - данные о заказах, с указанием кто отправил. Нужно вывести тех отправителей, у которых количество заказов больше среднего и % у них от общего количества заказов. Я еще только учусь и пытаюсь понять логику. Поэтому эти задачи разложила по частям: 1. Вывела тех отправителей, у которых количество заказов больше среднего: SELECT sh.shippername, COUNT(o.orderid) AS total FROM Shippers sh JOIN Orders o ON sh.shipperid=o.shipperid GROUP BY sh.shippername HAVING COUNT(o.orderid)> (SELECT AVG(total) from ( SELECT sh.shippername, COUNT(o.orderid) AS total FROM Shippers sh JOIN Orders o ON sh.shipperid=o.shipperid GROUP BY sh.shippername) AS dt); +------------------+-------+ | shippername | total | +------------------+-------+ | Federal Shipping | 68 | | United Package | 74 | +------------------+-------+ 2 rows in set (0.00 sec) 2. Посчитала общее количество заказов (для дальнейшего расчета %) SELECT COUNT(o.orderid) AS total FROM Shippers sh JOIN Orders o ON sh.shipperid=o.shipperid; +-------+ | total | +-------+ | 196 | +-------+ 3. Как сложить вместе, чтобы итоговая таблица имела вид: +------------------+------------+--------+ | shippername | total | Quota | +------------------+------------+--------+ | Federal Shipping | 68 | 34.69% | | United Package | 74 | 37.76% | +------------------+------------+--------+ SELECT sh.shippername, COUNT(o.orderid) AS total, CONCAT(COUNT(o.orderid)*100/ ??? , ' %') AS Quota FROM Shippers sh JOIN Orders o ON sh.shipperid=o.shipperid GROUP BY sh.shippername HAVING COUNT(o.orderid)> (SELECT AVG(total) from ( SELECT sh.shippername, COUNT(o.orderid) AS total FROM Shippers sh JOIN Orders o ON sh.shipperid=o.shipperid GROUP BY sh.shippername) AS dt); Вот как и куда впихнуть результат второго запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 12:01 |
|
||
|
Вопрос по вложенным запросам.
|
|||
|---|---|---|---|
|
#18+
TatSНужно вывести тех отправителей, у которых количество заказов больше среднего и % у них от общего количества заказов.Для того, чтобы получить требуемые данные для одного отправителя, нужно его количество заказов, общее количество заказов, и среднее. Эти три цифири нужно посчитать двумя разными подзапросами - первое в запросе 1, если выбросить HAVING, остальное в запросе 2. И вот теперь, используя эти запросы как подзапросы, считаете нужное. Запрос 1. Назовем его query1. Код: sql 1. 2. 3. 4. Запрос 2. Назовем его query2. Код: sql 1. 2. Составляем окончательный запрос, как будто имеем не подзапросы, а 2 таблицы. Получаем: Код: sql 1. 2. 3. Подставляем подзапросы (сначала заменяем queryX на () AS queryX , потом в скобки вставляем текст подзапроса) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 12:36 |
|
||
|
Вопрос по вложенным запросам.
|
|||
|---|---|---|---|
|
#18+
Подставляем подзапросы (сначала заменяем queryX на () AS queryX , потом в скобки вставляем текст подзапроса) и получаем окончательный запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 12:38 |
|
||
|
Вопрос по вложенным запросам.
|
|||
|---|---|---|---|
|
#18+
Логику с запросами в виде таблиц поняла, спасибо. SELECT query1.shippername as 'Sender', query1.total / query2.total * 100 as 'Quota' FROM ( SELECT sh.shippername, COUNT(o.orderid) AS total FROM Shippers sh JOIN Orders o ON sh.shipperid=o.shipperid GROUP BY sh.shippername) AS query1 , ( SELECT COUNT(orderid) / COUNT(shipperid) AS average, COUNT(orderid) AS total FROM Orders) AS query2 WHERE query1.total > query2.average По этому запросу выдает результат +------------------+--------- + | Sender | Quota | +------------------+---------+ | Federal Shipping | 34.6939 | | Speedy Express | 27.5510 | | United Package | 37.7551 | +------------------+---------+ Однако, требуется результат : +------------------+------------+--------+ | shippername | total | Quota | +------------------+------------+--------+ | Federal Shipping | 68 | 34.69% | | United Package | 74 | 37.76% | +------------------+------------+--------+ т.е. еще условие вывода тех, у кого total больше среднего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 16:19 |
|
||
|
Вопрос по вложенным запросам.
|
|||
|---|---|---|---|
|
#18+
TatSеще условие вывода тех, у кого total больше среднего В запросе 2 - логическая ошибка. Он должен быть таким: Код: sql 1. 2. Внесите исправления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2018, 16:43 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1829806]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
9ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 379ms |

| 0 / 0 |
