Подзапрос показывает более одной группы строк по

Я пытаюсь получить данные о 5 лучших клиентах в системе бронирования на железной дороге. Чтобы получить это, я попытался получить максимальное значение, суммируя их тариф каждый раз, когда они делают заказ. Вот код.

SELECT  c. firstName, c.lastName,MAX(r.totalFare) as Fare
FROM    customer c, Reservation r, books b
WHERE  r.resID = b.resID
  AND  c.username = b.username
  AND  r.totalfare < (SELECT sum(r1.totalfare) Revenue
                    from Reservation r1, for_res f1, customer c1,books b1
                    where r1.resID = f1.resID
                    and   c1.username = b1.username
                    and   r1.resID = b1.resID
                    group by c1.username
      )
GROUP BY    c.firstName, c.lastName, r.totalfare
ORDER BY    r.totalfare desc
LIMIT 5;

это выдает ошибку: [21000][1242] Подзапрос возвращает более 1 строки

Если я удалю группу из подзапроса, результат будет: (это табличная форма)

Jade,Smith,1450
Jade,Smith,725
Jade,Smith,25.5
Monica,Geller,20.1
Rach,Jones,10.53

Но это не то, чего я хочу, как видите, я хочу добавить имя «Джейд» к общей стоимости проезда.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я просто не вижу смысла в подзапросе. Кажется, что вы можете получить желаемый результат с sum()

select c.firstname, c.lastname, sum(totalfare) as totalfare
from customer c
inner join books b on b.username = c.username
inner join reservation r on r.resid = b.resid
group by c.username
order by totalfare desc
limit 5

Это суммирует все резервирования каждого клиента и использует эту информацию для сортировки результатов. Это гарантирует одну строку для каждого клиента.

Запрос предполагает, что username является первичным ключом таблицы customer. Если это не так, вам нужно добавить столбцы firstname и lastname в предложение group by.

Обратите внимание, что здесь используются стандартные соединения (с ключевыми словами inner join ... on), а не неявные соединения старой школы (с запятыми в предложении from: это устаревший синтаксис, который не следует использовать в новом коде.

Другие вопросы по теме