Возврат строки из подвыбора - PullRequest
1 голос
/ 18 февраля 2011

У меня есть схема БД MySQL:

users (id, login)
coins (userid, value, curr)

Мне нужно написать select, который вернет результат: логин и максимальное количество монет, которые у него есть, и валюту этой монеты.

Имеюпопробовал что-то вроде этого:

SELECT login, 
(
  SELECT value, curr
  FROM coins 
  WHERE coins.userid = users.id
  ORDER BY value DESC
  LIMIT 1
) AS ROW(value, curr)
FROM users

Это не работает ... Я получу ошибку, что "Операнд должен содержать 1 столбец (столбцы)".Я ожидал этого, но я не знаю, как это сделать.

Итак, я предполагаю: есть ли способ вернуть несколько столбцов, одну строку (строку) из подзапроса в родительский запрос?

(Да, я могу использовать два подзапроса, но это не эффективно.)

Спасибо за ваше время.

1 Ответ

0 голосов
/ 18 февраля 2011
SELECT u.login, g.MaxVal, c.curr
FROM users u JOIN coins c ON u.id = c.userid 
  JOIN (
    SELECT userid, MAX(`Value`) MaxVal
    FROM coins
    GROUP BY userid
  ) g ON c.userid = g.userid AND c.Value = g.MaxVal 

В случае связей, приведенный выше запрос вернет все монеты с наибольшим значением, если вы хотите выбрать только одну из монет, вы можете добавить GROUP BY к внешнему запросу:

SELECT u.login, g.MaxVal, c.curr
FROM users u JOIN coins c ON u.id = c.userid 
  JOIN (
    SELECT userid, MAX(`Value`) MaxVal
    FROM coins
    GROUP BY userid
  ) g ON c.userid = g.userid AND c.Value = g.MaxVal 
GROUP BY c.userid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...