首页 > 解决方案 > 如何在列中找到相似的数据

问题描述

我的列中有每周数据,例如从第 1 周到第 52 周的整年数据

WEEK1 WEEK2 WEEK3 WEEK4 WEEK5 WEEK6 WEEK7
40.00 43.50 40.00 40.00 40.00 43.00 46.00

我正在寻找所有这些列的最常见值。就像在这个例子中答案是 40.00

标签: sql

解决方案


使用 sqlite(很可能是任何其他 SQL 数据库),您可以将宽数据转换为长数据,然后找到最常见的值。

SELECT value FROM
(
    SELECT 'Week1' AS week, week1 AS value FROM 'weeks'
    UNION ALL
    SELECT 'Week2' AS week, week2 AS value FROM 'weeks'
    UNION ALL
    SELECT 'Week3' AS week, week3 AS value FROM 'weeks'
    UNION ALL
    SELECT 'Week4' AS week, week4 AS value FROM 'weeks'
)
GROUP BY value
ORDER BY count(*) DESC
LIMIT 1;

根据需要添加更多列,并且可能添加用于按年份过滤的 where 子句。

由于 SQL 本身不支持列通配符,因此您可以考虑将数据从宽转换为长,正如其他人在评论中指出的那样。

相关帖子:

sqlite中的模式:使用带分组的 SQLite 计算模式

sql(hive)中的wide to long:在SQL中将数据从宽格式转换为长格式


推荐阅读