【问题标题】:SQL query to compare rows of table comparing a column valuesSQL查询比较表的行比较列值
【发布时间】:2012-05-06 13:35:43
【问题描述】:

我已将一个大型 CSV 文件导入到表格中。表格示例如下所示

name,      eye,point,field,date,seconds,sensitivity*10,slope,intercept,T*1000

NESSA SONIA ,R,6,4,08-04-09,32658845,160,1.062300e+001,62538,  1282
NESSA SONIA ,R,6,5,20-05-09,36288632,20, 5.360101e+000,64036,   771
NESSA SONIA ,R,6,6,02-12-09,53223062,60, 3.425260e+000,64590,   767
NESSA SONIA ,L,6,4,08-04-09,32658922,230,4.629489e+000,64382,   582
NESSA SONIA ,L,6,5,20-05-09,36288515,170,2.805373e+000,64901,   511
NESSA SONIA ,L,6,6,02-12-09,53223059,220,3.528252e+000,64694,  1022

我必须将右眼和左眼“灵敏度*10”值与匹配点和字段值进行比较,并提取最高值(我的意思是行)。

例如,我必须比较第一行和第四行,因为点、字段和日期相同,并提取第四行,因为灵敏度最高。我有一个巨大的文件,需要提取所有值。任何人都可以帮助使用 sql 查询,将不胜感激。

【问题讨论】:

  • 我已经将左右眼分成两个表表 l 和表 r,然后使用 (select table l.* from table l where table l.@ 987654325@ > 10) union (select table r.* from table r where table r. sensitivity*10 > 10) 但在此之后,如果我使用连接比较和提取字段,它会给我笛卡尔积

标签: mysql sql


【解决方案1】:
(select  `table l`.*  from `table l`, `table r` 
where `table l`. `sensitivity*10` > 10 and `table l`.`sensitivity*10`>`table r`.`sensitivity*10`) 

union 

(select  `table r`.* from `table r`, `table l` 
where `table r`. `sensitivity*10` > 10 and `table r`.`sensitivity*10`>`table l`.`sensitivity*10`)

【讨论】:

  • 我分成左右两个表并使用了这个查询..想通了..谢谢蒂姆彼得森。和蓝脚
【解决方案2】:

您需要使用 SQL MAX() 函数和 GROUP BY 名称。

试试这样的:

SELECT  *
FROM    (
    SELECT  point, field, MAX(sensitivty*10) AS max
    FROM    table
    GROUP BY
            name
    ) tbl
JOIN    table
ON      table.point = tbl.field

另外,请查看另一个 Stackoverflow 问答,它的查询类似于您感兴趣的查询:SQL Group by & Max

【讨论】:

  • 对不起,它没有用,它给了我点和字段相同的单行。但我需要比较点场和日期相同的左右眼(灵敏度值)。观察图像中的第 1 行和第 4 行
  • 查询仍然显示具有相同点和字段的行,但它不与其他行进行比较
  • 是的,MAX() 正在获得整体max。这就是为什么只返回一行。我仍在尝试仅弄清楚如何为每个人获取max。很确定MAX(sensitivty*10) 可能需要在子查询中移动到其他地方。我正在努力,但不是最擅长 SQL,抱歉...
【解决方案3】:

我认为这应该适合你:

select if(t1.sensitivity*10 > t2.sensitivity*10,t1.sensitivity*10,t2.sensitivity*10) as col1  
from table t1 
inner join table t2 
    on  t1.field = t2.field 
    and t1.point = t2.point 
    and t1.date = t2.date 
where t1.eye ='R' and t2.eye ='L'   

【讨论】:

  • @bluefeet 我猜查询不太正确,我没有在您的查询中看到field=point。你能建议吗?谢谢
  • 如果 R 和 L 的眼睛在各自的表中,如何去掉 WHERE 子句?
  • @timpeterson 他是对的.. 单行的字段和点不必相同.. 它们应该匹配对应的左眼或右眼
  • 去掉WHERE子句怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多