>我正在寻找一个函数来从表中返回最主要的非数值。
我的数据库表记录了气象站的读数。其中许多是数字,但风向记录为 16 个文本值之一 - N,NNE,NE,ENE,E...等在瓦尔查尔领域。每 15 分钟添加一次记录,因此 95 行表示一天的天气。
我正在尝试计算当天的主要风向。手动,您将 Ns、NNE、NE 等的数量相加,看看哪些是最多的。
MySQL有没有一种简洁的方法可以做到这一点?
谢谢
如果不看到您的架构,很难回答您的问题,但这应该对您有所帮助。
假设风向与要忽略的数值存储在同一列中,则可以使用 REGEXP
忽略数值,如下所示:
select generic_string, count(*)
from your_table
where day = '2014-01-01'
and generic_string not regexp '^[0-9]*$'
group by generic_string
order by count(*) desc
limit 1
如果风向是列中存储的唯一内容,那么它就简单一些:
select wind_direction, count(*)
from your_table
where day = '2014-01-01'
group by wind_direction
order by count(*) desc
limit 1
您可以使用子查询执行此操作多天。例如(假设您将来没有任何数据),此查询将为您提供当月每天最常见的风向:
select this_month.day,
(
select winddir
from weatherdatanum
where thedate >= this_month.day
and thedate < this_month.day + interval 1 day
group by winddir
order by count(*) desc
limit 1
) as daily_leader
from
(
select distinct date(thedate) as day
from weatherdatanum
where thedate >= concat(left(current_date(),7),'-01') - interval 1 month
) this_month
以下查询应返回风向列表以及按最常出现次数排序的计数:
SELECT wind_dir, COUNT(wind_dir) AS count FROM `mytable` GROUP BY wind_dir ORDER DESC
希望有帮助