MySQL查询主要是非数字值

时间:2014-01-03 15:08:18

标签: mysql text max average

我正在寻找一个函数来从表中返回最主要的非数值。

我的数据库表记录来自耐候性的读数。其中许多是数字,但风向被记录为varchar字段中的16个文本值之一--N,NNE,NE,ENE,E ...等。记录每15分钟添加一次,因此95行代表一天的天气。

我正在尝试计算当天的主要风向。你可以手动将N,NNE,NE等的数量加在一起,看看哪些是最多的。

MySQL有一个巧妙的方法吗?

由于

2 个答案:

答案 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