gpt4 book ai didi

SQL 具有不在 SELECT 中的列

转载 作者:行者123 更新时间:2023-12-01 16:13:19 25 4
gpt4 key购买 nike

我有一个包含 3 列的表格:

userid   mac_address   count

一个用户的条目可能如下所示:

57193   001122334455   42
57193 000C6ED211E6 15
57193 FFFFFFFFFFFF 2

我想创建一个仅显示该用户“常用”的 MAC 的 View 。例如,我想过滤掉与该用户最常用的 MAC 地址相比使用率 <10% 的 MAC。此外,我想要每个用户 1 行。这可以通过 GROUP BY、HAVING 和 GROUP_CONCAT 轻松实现:

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

确实,结果如下:

57193   001122334455,000C6ED211E6   42

但是我真的不希望在我看来计数列。但如果我将其从 SELECT 语句中取出,则会收到以下错误:

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

有什么方法可以执行此操作,而不会被迫在我看来有一个令人讨厌的计数列?我知道我可能可以使用内部查询来做到这一点,但出于性能原因我想避免这样做。

非常感谢您的帮助!

最佳答案

由于 HAVING 明确引用选择列表中的列名称,因此不可能是您想要的。
但是,您可以将您的选择用作仅返回您想要的行的选择的子选择。

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 等其他 DBMS 中工作。一种解决方案是为子查询创建一个 View 。另一个解决方案看起来更干净:

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)

这会将 View 声明为仅返回 useridmacs 列,尽管底层的 SELECT 语句返回的列多于这两列。< br/>虽然我不确定,非DBMS MySQL是否支持这个...

关于SQL 具有不在 SELECT 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6692613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com