表格如下:
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);
但这对我没什么用...
答案 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)
从子查询计数可能更快,索引