gpt4 book ai didi

mysql - SQL 查询子句的顺序

转载 作者:行者123 更新时间:2023-11-29 18:08:59 25 4
gpt4 key购买 nike

我遇到了一种情况,我似乎不明白 SQL 在做什么。我有下表,想要给出评分最高= 5 的所有种类的咖啡及其本身的数量。

create table likes
(
CName varchar(30),
UName varchar(30),
Rating int
);

insert into likes (CName, UName, Rating)
values ('Java', 'Klaus', '5'),
('Super', 'Klaus', '5'),
('MP', 'Klaus', '3'),
('Java', 'Marc', '5'),
('Mp', 'Marc', '5'),
('Super', 'Marc', '2'),
('Java', 'Nine', '2'),
('Super', 'Nine', '0'),
('MP', 'Karo', '3'),
('Super', 'Fabian', '4');

但是这个解决方案并没有按预期工作

SELECT 
favcof.CName, favcof.cnt
FROM
(SELECT l.CName, COUNT(CName) cnt
FROM likes l
WHERE l.rating = 5
GROUP BY CName) favcof
WHERE
favcof.cnt = (SELECT MAX(favcof.cnt))

它的执行方式就好像没有外部 where 子句一样,并给出各种评分 = 5 的咖啡。

最佳答案

表达式(select max(favcof.cnt)) 不执行任何操作。您只需删除选择,您就会得到favcof.cnt = favcof.cnt

这有点复杂,因为 favcof.cnt = max(favcof.cnt) 会生成语法错误,因为 where 子句中不允许使用聚合函数。因此,select 子查询实际上是一个没有 from 的聚合子查询。因为只有一个值,所以它返回该值。

您想要一个相关子查询。这看起来像:

SELECT favcof.CName, favcof.cnt
FROM (SELECT l.UName, count(UName) as cnt
FROM likes l
WHERE l.rating=5
GROUP BY UName
) favcof
WHERE favcof.cnt = (SELECT MAX(favcof2.cnt)
FROM (SELECT l2.UName, count(l2.UName) as cnt
FROM likes l2
WHERE l2.rating=5
GROUP BY l2.UName
) favcof2
);

肯定还有其他方法来编写此查询。但是,这应该可以帮助您理解为什么您的版本没有执行您想要的操作。

关于mysql - SQL 查询子句的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47552089/

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