sql - 计算元素并找到最大值
问题描述
我有一张这样的桌子:
+-----+-----+-----+
| uid | aid | tid |
+-----+-----+-----+
| 1 | 6 | 7 |
+-----+-----+-----+
| 2 | 6 | 7 |
+-----+-----+-----+
| 3 | 5 | 7 |
+-----+-----+-----+
| 4 | 5 | 7 |
+-----+-----+-----+
| 5 | 5 | 7 |
+-----+-----+-----+
我期待找到,对于每个 tid,哪个援助有更多的元素。例如,我知道 tid 7 有 2 次aid 6,就像这样。
+
-----+-----+-------+
| tid | aid | count |
+-----+-----+-------+
| 7 | 6 | 2 |
+-----+-----+-------+
| 7 | 5 | 3 |
+-----+-----+-------+
我期望的最终结果是 7 5 3,因为我想要最大计数。
我已经使用两个查询达到了我想要的结果:
CREATE TABLE temp AS
SELECT tid, aid, count(aid) as c
FROM startingtable
GROUP BY tid, aid
ORDER BY tid, aid;
接着
CREATE TABLE result AS
select a.tid, a.aid, a.c
from temp a
inner join
(SELECT tid, max(c) as m
FROM temp
GROUP BY tid) b
on a.tid = b.tid and a.c = b.m
order by tid;
我需要它只使用一个查询就可以正常工作。你会怎么做?
感谢您的时间。
解决方案
您可以尝试将自联接与子查询一起使用。
CREATE TABLE temp AS
SELECT t1.*
FROM (
SELECT tid,
aid,
count(aid) as cnt
FROM startingtable
GROUP BY tid, aid
) t1 JOIN (
SELECT tid,
MAX(cnt) maxcnt
FROM (
SELECT tid,
aid,
count(aid) as cnt
FROM startingtable
GROUP BY tid, aid
) t2
GROUP BY tid
)t2 ON t1.tid = t2.tid and t1.cnt = t2.maxcnt
您可以尝试使用窗口函数将数据插入表中的另一种CTE
方法Row_number
。
WITH CTE AS (
SELECT tid,
aid,
count(aid) as cnt
FROM startingtable
GROUP BY tid, aid
)
insert into #temp (tid,aid,cnt)
select t2.tid,
t2.aid,
t2.cnt
from (
SELECT *,ROW_NUMBER() OVER(PARTITION BY tid order by cnt desc) rn
FROM CTE
) t2
where rn = 1
推荐阅读
- pdf - 如何在乳胶中以 *.pdf 格式显示任意编程语言(例如 Isabelle/Isar)?
- reactjs - 类型错误:editMedicine 不是函数 - 反应
- sqlite - Flutter SQLITE如何限制删除
- c# - 基于实例类型的调用函数没有按我预期的那样工作
- r - 使用重复函数找到小于 x 的最大斐波那契数
- composition - 如果表单在 vee 验证中的 vue3 cli compostion apis 中无效,如何停止表单提交
- javascript - 如何在 Odoo 13 中继承枢轴视图
- php - 在 WooCommerce 管理单个订单中带有多个复选框的 Metabox
- python - 如何在文件中添加数字
- c++ - 使用 musl-g++ 从源代码构建时对“__printf_chk”的未定义引用