2

我正在研究以下模式(粗体文本代表 pk,“:”代表引用表):

用户(用户名,姓名,姓氏);

产品(id,名称,数量);

购买(用户:用户,产品:产品,日期和时间,购买数量);

我想查找购买次数最多的用户的姓名和姓氏。

首先,我使用嵌套查询找出每个用户的购买次数,然后选择购买 >= ALL 这些值的用户:

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)

是否有另一种方法可以在不使用嵌套查询的情况下实现相同的目标?

提前感谢您的宝贵时间。

4

2 回答 2

4

就在这里。这听起来像是一项家庭作业,但您似乎已经投入了一些工作。这个想法是按顺序排列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;

其他数据库会limit 1在 , 之后放置一个子句order by,而不是top 1. 而其他人可能有更神秘的语法。

于 2014-01-31T23:38:04.857 回答
1

这将返回用户购买最多的商品。

SELECT TOP 1
   U.name, U.surname, SUM(P.quantityPurchased) Purchases
FROM users U
  JOIN purchases P
    on U.username= P.user
GROUP BY U.username, U.name, U.surname
ORDER BY Purchases DESC

这将返回购买最多的用户。

SELECT TOP 1
   U.name, U.surname, COUNT(*) occurrences
FROM users U
  JOIN purchases P
    on U.username= P.user
GROUP BY U.username, U.name, U.surname
ORDER BY occurrences DESC
于 2014-01-31T23:36:45.633 回答