Можно ли сделать группу по количеству (отличной) без объединения? - PullRequest
1 голос
/ 21 ноября 2011
Table 1 : (Company)

ID Name
1  A
2  B
3  C

Каждая компания (pk = ID) может иметь одного или нескольких сотрудников.

Table 2 :  (Employee)  (CompanyID referencing ID)

CompanyID EmpID Name
1         1     Joe
1         2     Doe
1         3     Boe
2         4     Lou
3         5     Su  
3         6     Ram

Запрос:

select CompanyID, count(*) from Employee group by CompanyID having count(*) > 1; # Lists companies and their counts.

CompanyID count(*)
1         3  
3         2

Для этого запроса мне нужен только один результат сколичество различных идентификаторов компаний.Таким образом, «2» в данном случае [Компании A и C].

Короче говоря, я ищу количество компаний с двумя или более сотрудниками.

Есть ли способ получить результат без временной таблицы или объединения?Я использую MySQL.

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Да:

select count(*) from
(select CompanyID from Employee group by CompanyID having count(*) > 1) v

или для диапазонов:

select count(*) from
(select CompanyID from Employee group by CompanyID 
 having count(*) >= 5 and count(*) < 10) v
0 голосов
/ 21 ноября 2011

Да, это возможно с подзапросами:

SELECT COUNT(*)
FROM
  ( SELECT 1
    FROM Employee 
    GROUP BY CompanyID 
    HAVING COUNT(*) > 1
  ) AS grp

или

SELECT COUNT(DISTINCT CompanyID) 
FROM Employee AS e
WHERE EXISTS
      ( SELECT *
        FROM Employee AS e2
        WHERE e2.CompanyID = e.CompanyId
          AND e2.EmpID <> e.EmpID
      )

или, возможно, если COUNT(*) медленно, вы можете использовать MIN() и MAX():

SELECT COUNT(*)
FROM
  ( SELECT 1 
    FROM Employee 
    GROUP BY CompanyID 
    HAVING MAX(EmpID) > MIN(EmpId)
  ) AS grp
...