我正在研究以下架构(粗体文本代表 pk,“:”代表引用表):
USERS(用户名,姓名);
产品(id,名称,数量);
购买(用户:用户,产品:产品,日期和时间,购买数量);
我想查找购买次数最多的用户的姓名。
首先,我使用嵌套查询找出每个用户的购买次数,然后选择购买 >= 所有这些值的用户:
SELECT name, surname, username
FROM users JOIN purchases ON username = user
GROUP BY name, surname, username
HAVING count(*) >= ALL(
SELECT count(*)
FROM utenti JOIN acquisti ON username = user
GROUP BY username)
是否有另一种方法可以在不使用嵌套查询的情况下实现相同的目的?
提前感谢您抽出时间。
最佳答案
是的,有。这听起来像是一项家庭作业,但你似乎已经投入了一些工作。这个想法是按 count(*)
排序并获取第一行。 SQL Server、Sybase 和 Access 中的语法为:
SELECT top 1 name, surname, username
FROM users as u INNER JOIN
purchases as p
ON u.username = p.user
GROUP BY name, surname, username
ORDER BY count(*) desc;
其他数据库会在 order by
之后放置 limit 1
子句,而不是 top 1
。其他人可能有更神秘的语法。
关于SQL查询查找表中出现次数最多的值,无需嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491964/