SQL:在第1列中查找特定成员的最常用值
我有以下与SQL相关的问题: 假设我有以下简单的数据表: 我想确定最常见的街道地址,并将其放在第3栏: 我认为这应该是相当直接的使用计数?但我不太清楚该怎么做。非常感谢您的帮助SQL:在第1列中查找特定成员的最常用值,sql,Sql,我有以下与SQL相关的问题: 假设我有以下简单的数据表: 我想确定最常见的街道地址,并将其放在第3栏: 我认为这应该是相当直接的使用计数?但我不太清楚该怎么做。非常感谢您的帮助 关于此select语句将为您提供最频繁的事件让我们称之为A SELECT `value`, COUNT(`value`) AS `value_occurrence` FROM `my_table` GROUP BY `value` ORDER BY `v
关于此select语句将为您提供最频繁的事件让我们称之为A
SELECT `value`,
COUNT(`value`) AS `value_occurrence`
FROM `my_table`
GROUP BY `value`
ORDER BY `value_occurrence` DESC
LIMIT 1;
要将此插入表中
INSERT INTO db (col1, col2, col3) VALUES (val1, val2, A)
请注意,您希望将整个select STANTE设置为 这是我刚刚写的一个很长的方法。它只列出最常用的地址。您必须获取这些值并将其插入表中。看看它是否适合您:
select * from
(select d.company, count(d.address) as final, c.maxcount,d.address
from dbo.test d inner join
(select a.company,max(a.add_count) as maxcount from
(select company,address,count(address) as add_count from dbo.test group by company,address)a
group by a.company) c
on (d.company = c.company)
group by d.company,c.maxcount,d.address)e
where e.maxcount=e.final
你没有提到你的数据库管理系统。这是一个针对Oracle的解决方案
select
company,
address,
(
select stats_mode(address)
from mytable this_company_only
where this_company_only.company = mytable.company
) as most_common_address
from mytable;
这看起来有点笨拙,因为
STATS\u MODE
只能作为聚合函数使用,不能作为分析窗口函数使用。它首先按公司和地址统计记录,然后按公司对记录进行排名,给出最常出现的地址排名#1。然后它只保留那些排名最好的地址记录,再次与表联接并显示结果
select
mytable.company,
mytable.address,
ranked.address as most_common_address
from mytable
join
(
select
company,
address,
row_number() over (partition by company oder by cnt desc) as rn
from
(
select
company,
address,
count(*) over (partition by company, address) as cnt
from mytable
) counted
) ranked on ranked.rn = 1
and ranked.company = mytable.company
and ranked.address = mytable.address;
您使用的是哪种数据库管理系统?您可能还想阅读以下内容:这种方法应该适用于大多数数据库,但如果您使用的是mySQl,则不会,因为它没有窗口功能。这就是为什么在询问SQL问题时始终指定数据库后端是至关重要的,因为许多解决方案只适用于特定的数据库。@HLGEM:我同意。尽管如此,我还是想发布这个答案(还有Oracle的答案),因为即使OP使用的DBMS没有窗口功能,我的答案至少可以帮助未来的读者解决类似的问题。