Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Select from select


Автор: andriy89 21.9.2011, 19:58
Добрый вечер! Есть ли возможность группировать данные по итоговой таблице, полученной с помощью select в одном запросе ?

Есть 2 таблицы:
1) Клиенты с полями: idPer, Name, City
2) Заказы c полями: idOrd, OrderNo, idPer, OrderPricе

Необходимо вначале вывести всех клиентов и их заказы, и сразу же в итоговой таблице сгруппировать сумму заказов по каждому клиенту. Попробовал что-то типа:

Код

SELECT a.Name, SUM(o.OrderPrice)
FROM (SELECT a.Name, a.City, o.OrderNo, o.OrderPrice
FROM Per a
JOIN Ord o
ON a.idPer = o.idPer)
GROUP BY a.Name


Не работает.

И еще вопрос: как по итоговой таблице можно удалить строку (столбец) ?

Автор: Akina 21.9.2011, 20:20
Цитата(andriy89 @  21.9.2011,  20:58 Найти цитируемый пост)
Необходимо вначале вывести всех клиентов и их заказы, и сразу же в итоговой таблице сгруппировать сумму заказов по каждому клиенту.

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

Цитата(andriy89 @  21.9.2011,  20:58 Найти цитируемый пост)
как по итоговой таблице можно удалить строку (столбец) ? 

Вопрос непонятен.

Автор: andriy89 21.9.2011, 20:23
Цитата(Akina @ 21.9.2011,  20:20)
Цитата(andriy89 @  21.9.2011,  20:58 Найти цитируемый пост)
Необходимо вначале вывести всех клиентов и их заказы, и сразу же в итоговой таблице сгруппировать сумму заказов по каждому клиенту.

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

Цитата(andriy89 @  21.9.2011,  20:58 Найти цитируемый пост)
как по итоговой таблице можно удалить строку (столбец) ? 

Вопрос непонятен.


1) А если все-таки одним запросом, то возможно ли реализовать это ?

2) Уточню вопрос: мы сделали запрос SELECT. Вывелась результирующая таблица. Можно ли из этой таблицы удалить строку (столбец), используя этот же запрос SELECT (т.е. опять получается два запроса в одном) ?

Автор: Akina 21.9.2011, 22:06
Цитата(andriy89 @  21.9.2011,  21:23 Найти цитируемый пост)
возможно ли реализовать это ?

как ты себе это представляешь?

Цитата(andriy89 @  21.9.2011,  21:23 Найти цитируемый пост)
Можно ли из этой таблицы удалить строку (столбец), используя этот же запрос SELECT 

нет


Автор: andriy89 21.9.2011, 22:40
Цитата(Akina @ 21.9.2011,  22:06)
Цитата(andriy89 @  21.9.2011,  21:23 Найти цитируемый пост)
возможно ли реализовать это ?

как ты себе это представляешь?

Цитата(andriy89 @  21.9.2011,  21:23 Найти цитируемый пост)
Можно ли из этой таблицы удалить строку (столбец), используя этот же запрос SELECT 

нет

я поэтому и спрашиваю smile я не представляю, как это можно выразить одним запросом.

Автор: rodnover 22.9.2011, 07:43
union считается одним запросом?

Код

SELECT a.Name as Customer, a.City, o.OrderNo, o.OrderPrice
FROM Per a
JOIN Ord o ON a.idPer = o.idPer
union
SELECT a.Name as Customer, a.City, o.OrderNo, sum(o.OrderPrice)
FROM Per a
JOIN Ord o ON a.idPer = o.idPer
group by  a.Name, a.City, o.OrderNo
order by Customer


или

Код

SELECT a.Name as Customer, a.City, o.OrderNo, o.OrderPrice
FROM Per a
JOIN Ord o ON a.idPer = o.idPer
union
SELECT concat(a.Name, ' (итого)') as Customer, null, null, sum(o.OrderPrice)
FROM Per a
JOIN Ord o ON a.idPer = o.idPer
group by  a.Name
order by Customer

Автор: andriy89 22.9.2011, 09:34
Цитата(rodnover @ 22.9.2011,  07:43)
union считается одним запросом?

Код

SELECT a.Name as Customer, a.City, o.OrderNo, o.OrderPrice
FROM Per a
JOIN Ord o ON a.idPer = o.idPer
union
SELECT a.Name as Customer, a.City, o.OrderNo, sum(o.OrderPrice)
FROM Per a
JOIN Ord o ON a.idPer = o.idPer
group by  a.Name, a.City, o.OrderNo
order by Customer


или

Код

SELECT a.Name as Customer, a.City, o.OrderNo, o.OrderPrice
FROM Per a
JOIN Ord o ON a.idPer = o.idPer
union
SELECT concat(a.Name, ' (итого)') as Customer, null, null, sum(o.OrderPrice)
FROM Per a
JOIN Ord o ON a.idPer = o.idPer
group by  a.Name
order by Customer

это один запрос, но в итоговой таблице будут результаты первого + второго запроса.

Автор: rodnover 22.9.2011, 10:18
Цитата(andriy89 @  22.9.2011,  13:34 Найти цитируемый пост)
это один запрос, но в итоговой таблице будут результаты первого + второго запроса. 

И? 
Нужно чтобы в 2х разных отображаемых таблицах были подобные сведения? тогда либо 2 запроса, либо к средствам языка на котором реализуется отображение данных.

Код

указываем на первую запись выборки

пока записи не кончились
начало
    если выполнилась проверка нужной строки или столбца то
    начало
        выводим ее
    конец
    выбираем следующую запись
конец

//отображаем в другом месте по другому
опять указываем на первую запись выборки

пока записи не кончились
начало
    если выполнилась другая проверка нужной строки или столбца то
    начало
        выводим ее
    конец
    выбираем следующую запись
конец


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)