2011-10-20 18 views
2

データベーススキーマは
が管理SQLクエリMAX()、カウントは()

従業員(EMPLOYEE_NAME、通り、都市)
作品(EMPLOYEE_NAME、COMPANY_NAME、給与)
会社(COMPANY_NAME、都市)のように見えます(従業員名、マネージャ名)

質問が必要なクエリは次のとおりです。
ほとんどの従業員を持つ会社を見つけます。

私は、クエリによる最大数を見つけることができます:

SELECT max(cnt) max_cnt 
FROM (

SELECT count(employee_name) cnt, company_name 
FROM works 
GROUP BY company_name 
)w1; 

をしかし、今、私は会社の名前を見つけることができません。誰かが何らかのアイデアを持っている場合は、共有してください

答えて

4

あなたの代わりにMAXORDER BY ... DESC LIMIT 1を使用することができる最大値を含む行全体を取得するには:

SELECT company_name, cnt 
FROM (
    SELECT company_name, count(employee_name) AS cnt 
    FROM works 
    GROUP BY company_name 
) w1 
ORDER BY cnt DESC 
LIMIT 1 
2

どのようなものについて:

SELECT count(employee_name) cnt, company_name 
FROM works 
GROUP BY company_name 
ORDER BY cnt DESC 
LIMIT 1; 

編集:MySQLの上で修正し

+0

はい - 私が提出した後に実現しました。 –

2
SELECT company_name,count(*) as cnt 
FROM works 
GROUP BY company_name 
ORDER BY cnt DESC 
1
select company_name 
from works 
group by company_name 
having count(distinct employee_name)>=all(select count(distinct employee_name) 
from works 
group by company_name) 
0

ここでの作業クエリが

Select * from(SELECT count(EmpName)cnt, CName FROM works GROUP BY CName Order By cnt desc) where ROWNUM = 1; 
0

だもちろん、これは質問のように見えます。

複数の企業で同じ従業員数が同じ場合、LIMITを使用したクエリは機能しません。 「ORDER BY」は役に立たない情報を除外しませんでした。したがって、私たちは以下の解決策を持っています

SELECT company_name FROM 
(SELECT company_name, count(employee_name) cnt 
    FROM works 
    GROUP BY company_name) 
JOIN 
(SELECT max(cnt) max_cnt 
FROM (
    SELECT count(employee_name) cnt 
    FROM works 
    GROUP BY company_name 
)) ON cnt = max_cnt