如何将组转换为自联接

时间:2011-10-04 13:28:03

标签: sql

表格如下:

employeeID | groupCode
   1            red111
   2            red111
   3            blu123
   4            blu456
   5            red553
   6            blu423
   7            blu341

我如何计算父组中的employeeID数(例如红色或蓝色,但实际表中还有更多组)的组成员总数大于2(所以那些在这个特殊的例子中,蓝色不包括在内。

要扩展:groupCode由父组(三个字母)组成,后跟子组的一些数字。

使用自联接,或者至少不使用group by语句。

到目前为止,我有:

SELECT T1.employeeID
FROM TABLE T1, TABLE T2
WHERE T1.groupCode <> T2.groupCode
  AND SUBSTR(T1.groupCode, 1, 3) = SUBSTR(T2.gorupCode, 1, 3);

但这对我没什么用...

2 个答案:

答案 0 :(得分:1)

EMPLOYEE的前3个字符上添加索引。

然后尝试这个:

SELECT ed.e3
     , COUNT(*) 
FROM EMPLOYEE e
  JOIN
    ( SELECT DISTINCT                    
        SUBSTR(groupCode, 1, 3) AS e3
      FROM EMPLOYEE 
    ) ed
    ON e.groupCode LIKE CONCAT(ed.e3, '%')
GROUP BY ed.e3
HAVING COUNT(*) >= 3           --- or whatever is wanted 

答案 1 :(得分:0)

怎么样?
SELECT substring(empshirtno, 1, 3), 
      Count(SELECT 1 from myTable as myTable2 
            WHERE substring(mytable.empshirtno, 1, 3) = substring(mytable2.empshirtno, 1, 3))
FROM MyTable
GROUP BY substring(mytable2.empshirtno, 1, 3)

从子查询计数可能更快,索引