我正在寻找一个函数来从表中返回最主要的非数值。
我的数据库表记录来自耐候性的读数。其中许多是数字,但风向被记录为varchar字段中的16个文本值之一--N,NNE,NE,ENE,E ...等。记录每15分钟添加一次,因此95行代表一天的天气。
我正在尝试计算当天的主要风向。你可以手动将N,NNE,NE等的数量加在一起,看看哪些是最多的。
MySQL有一个巧妙的方法吗?
由于
答案 0 :(得分:0)
以下查询应返回风向列表以及按大多数事件排序的计数:
SELECT wind_dir, COUNT(wind_dir) AS count FROM `mytable` GROUP BY wind_dir ORDER DESC
希望有所帮助
答案 1 :(得分:0)
如果没有看到您的架构,很难回答您的问题,但这应该会对您有所帮助。
假设风向与您要忽略的数值存储在同一列中,您可以使用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