sql - 选择具有最多值的行并显示它们
问题描述
嗨,大家好 !
我有这样的表,我需要为具有最多 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
解决方案
您正在选择已登录/提交最多类别的用户,其中具有相同类别的记录分组。然后记录按降序排列。
为了理解这一点,我将这些表映射到一组熟悉的表。
我进行以下映射:
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。
推荐阅读
- jquery - 我想在我的输入键功能上运行这个点击功能
- c - 带有 malloc 的 2d 数组声明 - 答案解释(参数)
- django - 评估 django-qr-code 生成的二维码中的转义序列
- spring - 如何解决 Spring Boot 中的 Whitelabel 错误页面
- r - 对于分布不是高斯分布的混合模型,您如何执行预期的最大化算法?
- python - psycopg2.ProgrammingError:无法在 odoo 14 中调整类型“NewId”
- c# - 需要澄清帮助 - C# / OOP / 继承 / 多态性 / 多重继承
- mysql - SQL 从两个不同的表中选择相同的列
- php - Laravel 8.0 Blade 嵌套 @extends @section 和 @yield 不起作用
- html - 这是匹配 Vim 中每个英文单词的正确方法吗?(Vim 正则表达式)