如何根据不同的ID查找相似的组

时间:2019-02-28 09:47:12

标签: sql vertica

我有一个看起来很像这样的表:

enter image description here

我正在尝试查找哪些案例是重复的-意味着,哪些案例 具有相同的组,参数1,参数2,参数3 我尝试使用笛卡尔积,但是我不知道这些情况是否具有相同的行数(因为在where子句中,我只接受相等的行,例如:

where a.group=b.group
and a.parameter1=b.parameter1
and a.parameter2=b.parameter2
and a.parameter3=b.parameter3
and a.case!=b.case

),以及是否全部相同。

有人在从事类似的工作并且可能对此有解决方案吗?

4 个答案:

答案 0 :(得分:0)

您可以尝试使用exists

   select t1.* from table_name t1
    where exists  ( select 1 from table_name t2 where t1.parameter1=t2.parameter1
                                              and t1.parameter2=t2.parameter2
                                              and t1.parameter3=t2.parameter3
                                        having count(*)>1
                  )

答案 1 :(得分:0)

我不确定这是否是最简单的方法,但对我有用 您运行查询以查找要与之比较的数据,并在第一个查询中执行第二个查询以获取结果...

<?php 

//Retrieves data from MySQL for First Time
$data_p = mysql_query("SELECT * FROM TABLE") or die(mysql_error()); 

 //Puts it into an array 
 while($info = mysql_fetch_array( $data_p )) 
 {
$parameter1_bs=$info['parameter1'];
$parameter2_bs=$info['parameter2'];
$parameter3_bs=$info['parameter3'];


//Retrieves data from MySQL to compare with the previous result 
$data_po = mysql_query("SELECT * FROM TABLE WHERE $parameter1_bs=parameter1 AND $parameter2_bs=parameter2 AND $parameter3_bs=parameter3") or die(mysql_error()); 
$row = mysql_num_rows($data_po); // $row will count how many results

 //Puts it into an array 
 while($info = mysql_fetch_array( $data_pp )) 
 {
$case=$info['case'];
echo $case;
echo "<br>";
}}

?>

答案 2 :(得分:0)

使用窗口功能!

select t.*
from (select t.*,
             count(*) over (partition by Group, parameter1, parameter2, parameter3) as cnt
      from t
     ) t
where cnt > 1
order by Group, parameter1, parameter2, parameter3;

您可以通过简单的汇总获得重复的键值:

select Group, parameter1, parameter2, parameter3, count(*)
from t
group by Group, parameter1, parameter2, parameter3
having count(*) > 1;

答案 3 :(得分:0)

这可能使我的前任所写的内容更加清楚或混乱。

是SQL。 Vertica是支持ANSI 2003标准的数据库之一,该数据库具有“基于窗口的”功能,也称为OLAP功能。那就是在函数调用之后添加OVER()子句的代码。就像戈登在上面说的那样-该查询实际上有效-我只是将您输入的数据插入第一个Common Table Expression-初始WITH子句的第一个条目列表。

在这里:

print("Payroll Calculator")
EmployeesName = input("Please enter employees Name or 0 to quit:")
WeeklyHours = int(input("Please Enter Hours Worked:"))
PayRate = int(input("Please Enter Pay Rate:"))
print("Normal Pay Rate is:", 40 * PayRate)
if(WeeklyHours > 40):
    Overtime = PayRate * 1.5
    if(WeeklyHours > 40):
     print("Your Overtime Hours are:", WeeklyHours - 40)
     print("Your Overtime Rate is:", Overtime * 1.5)
    GrossPay = WeeklyHours * Overtime

print("Your Gross Pay is:", WeeklyHours * Overtime)

而且:从这里开始,您可以按'occ_count'进行过滤,确定最大的 按occ_count或您最终需要的顺序排序的重复项数。