首页 > 解决方案 > 选择具有最多值的行并显示它们

问题描述

文本 嗨,大家好 !

我有这样的表,我需要为具有最多 Id_sprawnosci 的 Id_harcerza 选择 Harcerze.Imie,Harcerze.Nazwisko,Sprawnosc.Nazwa_sprawnosci 并用他们的名字显示它们 (Nazwa_sprawnosci)

因此输出应如下所示:(其示例数据)如果两行的数量相同,则显示两者

Imie  | Nazwisko | Nazwa_sprawnosci

Maciej  Linux      ratownik
Maciej  Linux      zeglarz
Maciej  Linux      goral
Maciej  Linux      tropiciel
Maciej  Linux      strzelec
Maciej  Linux      goral

编辑。我正在使用 MS Access 2019。

关系是:

Harcerze.Id_harcerza(PK) 到 Dzialania.Id_harcerza

Sprawnosc.Id_sprawnosci(PK) 到 Dzialania.Id_sprawnosci

标签: sqlms-access

解决方案


您正在选择已登录/提交最多类别的用户,其中具有相同类别的记录分组。然后记录按降序排列。

为了理解这一点,我将这些表映射到一组熟悉的表。

我进行以下映射:

Harcerze => Users
Sprawnosc => DeviceType
Dzailania => AuditLog

Harcerze.Imie,Harcerze.Nazwisko => a user name
Sprawnosc.Nazwa_sprawnosci => a device type (the category to be grouped)

我定义了以下表格:

Users (ID int, Name char(10));
DeviceType (ID, DeviceType char(10));
AuditLog (ID int, DateLogged date, UserID int, DeviceTypeID int);

样本数据:

DELETE FROM DeviceType;    
INSERT INTO DeviceType VALUES (1, 'Mobile');    
INSERT INTO DeviceType VALUES (2, 'Tablet');    
INSERT INTO DeviceType VALUES (3, 'Desktop');

DELETE FROM Users;    
INSERT INTO Users VALUES (1, 'Steve');    
INSERT INTO Users VALUES (2, 'May');    
INSERT INTO Users VALUES (3, 'Peter');    
INSERT INTO Users VALUES (4, 'Alice');    
INSERT INTO Users VALUES (5, 'William');

DELETE FROM AuditLog;    
INSERT INTO AuditLog VALUES (1, '2021-05-01', 1, 1);    
INSERT INTO AuditLog VALUES (2, '2021-05-02', 2, 2);    
INSERT INTO AuditLog VALUES (3, '2021-05-03', 3, 3);    
INSERT INTO AuditLog VALUES (4, '2021-05-04', 1, 2);    
INSERT INTO AuditLog VALUES (5, '2021-05-06', 2, 1);    
INSERT INTO AuditLog VALUES (6, '2021-05-10', 4, 1);    
INSERT INTO AuditLog VALUES (7, '2021-05-12', 5, 2);    
INSERT INTO AuditLog VALUES (8, '2021-05-15', 1, 3);    
INSERT INTO AuditLog VALUES (9, '2021-05-16', 1, 2);    
INSERT INTO AuditLog VALUES (10, '2021-05-16', 4, 2);

SQL查询:

SELECT w.[Name], total_logins=SUM(w.[num_logs])
FROM 
   (SELECT u.[Name], d.[DeviceType], num_logs=COUNT(d.[DeviceType])
    FROM   AuditLog a
    JOIN   Users u ON u.ID = a.UserID
    JOIN   DeviceType d ON d.ID = a.DeviceTypeID
    GROUP BY u.[Name], d.[DeviceType]) w
GROUP BY w.[Name]
ORDER BY 2 DESC

输出:

Name        total_logins
----
Steve       4
Alice       2
May         2
Peter       1
William     1

我希望这在 SQL 中很有用,因为我很长时间没有使用 Access。


推荐阅读