SQL, имеющий столбцы не в SELECT

у меня есть таблица с 3 столбцами:

userid   mac_address   count

записи для одного пользователя может выглядеть так:

57193   001122334455   42
57193   000C6ED211E6   15
57193   FFFFFFFFFFFF   2

Я хочу создать представление, которое отображает только те MAC, которые считаются "обычно используемыми" для этого пользователя. Например, я хочу отфильтровать MAC, которые используются

SELECT userid, GROUP_CONCAT(mac_address SEPARATOR ',') AS macs, count
FROM mactable
GROUP BY userid
HAVING count*10 >= MAX(count)

и действительно, результат таков:

57193   001122334455,000C6ED211E6   42

однако я действительно не хочу, чтобы столбец count в моем представлении. Но если я выну его из инструкции SELECT, я получу следующую ошибку:

#1054 - Unknown column 'count' in 'having clause'

есть ли способ, которым я могу выполнить эту операцию, не будучи вынужденным иметь неприятный счетчик-столбец в моем представлении? Я знаю, что, вероятно, могу сделать это с помощью внутренних запросов, но я хотел бы избежать этого для производительности причины.

ваша помощь очень ценится!

1 ответов


As HAVING явно ссылается на имена столбцов в списке выбора, невозможно то, что вы хотите.
Однако, вы можете использовать ваш выбор в качестве подзапроса в Select, который возвращает только те строки, которые вы хотите иметь.

SELECT a.userid, a.macs
FROM
(
    SELECT userid, GROUP_CONCAT(mac_address SEPARATOR ',') AS macs, count
    FROM mactable
    GROUP BY userid
    HAVING count*10 >= MAX(count)
) as a

обновление:
Из-за ограничения MySQL это невозможно, хотя он работает в других СУБД, таких как Oracle. Одним из решений было бы создание представления для подзапроса. Другое решение кажется уборщик:

CREATE VIEW YOUR_VIEW (userid, macs) AS
SELECT userid, GROUP_CONCAT(mac_address SEPARATOR ',') AS macs, count
FROM mactable
GROUP BY userid
HAVING count*10 >= MAX(count)

это объявит представление как возвращающее только столбцы userid и macs хотя базовый SELECT оператор возвращает больше столбцов, чем эти два.
Хотя я не уверен, поддерживает ли это не СУБД MySQL или нет...