SQL查询查找表中出现次数最多的值,无需嵌套

标签 sql nested max find-occurrences

我正在研究以下架构(粗体文本代表 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/

相关文章:

mysql - 对使用索引时查看 50 万行的 mysql 感到困惑

sql - 如何通过 BigQuery 中最近的时间戳加入?

mysql - 改进 mysql 中的文件路径搜索

c++ - Qt Sql 无法将变量绑定(bind)到 QSqlQuery 准备语句

javascript - React Native 嵌套导航 - 获取导航上下文

java - 如何将 .min() 或 .max() 作为流的方法参数?

algorithm - 如何在保持顺序的同时用较小的值替换条目?

mysql - 返回大量结果的组合 SQL 查询

r - 数据框到嵌套列表

Java:在嵌套参数化类型中获取内部类型(反射)