Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:在第1列中查找特定成员的最常用值_Sql - Fatal编程技术网

SQL:在第1列中查找特定成员的最常用值

SQL:在第1列中查找特定成员的最常用值,sql,Sql,我有以下与SQL相关的问题: 假设我有以下简单的数据表: 我想确定最常见的街道地址,并将其放在第3栏: 我认为这应该是相当直接的使用计数?但我不太清楚该怎么做。非常感谢您的帮助 关于此select语句将为您提供最频繁的事件让我们称之为A SELECT `value`, COUNT(`value`) AS `value_occurrence` FROM `my_table` GROUP BY `value` ORDER BY `v

我有以下与SQL相关的问题:

假设我有以下简单的数据表:

我想确定最常见的街道地址,并将其放在第3栏:

我认为这应该是相当直接的使用计数?但我不太清楚该怎么做。非常感谢您的帮助


关于

此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没有窗口功能,我的答案至少可以帮助未来的读者解决类似的问题。