私がしようと、以下のコマンドを使用して、何が間違っているmysqlを使用して最大数を見つける方法は?
mysql> select max(count(*)) from emp1 group by name;
ERROR 1111 (HY000): Invalid use of group function
私がしようと、以下のコマンドを使用して、何が間違っているmysqlを使用して最大数を見つける方法は?
mysql> select max(count(*)) from emp1 group by name;
ERROR 1111 (HY000): Invalid use of group function
を教えてください:
SELECT NAME, COUNT(*) as c FROM table GROUP BY name ORDER BY c DESC LIMIT 1
私は(私はあなたが望むものを正しく理解と仮定した場合)、次にしたい:
select c from
(
select count(*) as c, name from emp1 group by name
) tmp
order by c desc limit 1
これは、すべてのカウントから最大のカウントを名前で選択します。あなたのテーブルが含まれている場合たとえば、
Name
-----------------------
Test
Test
Hello
World
World
World
内側の選択は、外側の選択である、c
下降することによって、これを注文すると、最初のエントリを選択することになり、このデータ
c Name
----------------------
2 Test
1 Hello
3 World
で「表」を作成します3
。
これは、あなたがサブクエリとしてその結果にmax()
を使用し、その後、それによってグループにname
を選択する必要があります
select count(*) c from emp1 group by name order by c desc limit 1
外側のクエリはここでは必要ありません。 ORDER BY COUNT(*)DESC LIMIT 1も同様です。 – Strawberry
に短縮することができます。
select max(count)
from (
select
name,
count(*) as count
from emp1
group by name) x
私は、クエリをフォーマットしましたあなたは、あなたがそれを見たときに、すべてを1行に入れるのではなく、何が起こっているかを見ることができます。 fnfで "x"を指定すると、サブクエリの必須エイリアスになります。
group byを使用するには、selectステートメントに名前を含めます。ここでの機能によりグループについての記事を読む
... enter link description hereSELECT MAX(name_count)
FROM
(
SELECT name
,count(*) as name_count
FROM emp1
GROUP BY
name
)
最も外側のSELECT文でも名前を選択する方法はありますか?だから、あなたがMAX(name_count)を持つ名前グループを知りたければ? – Logan
あなたが求めている「どのようなあなたの文を使用して、間違っています」。私はあなたが何を意味するかを理解する
select max(count(*))
from emp1
group by name;
:これはあなたの文です。しかし、SQLコンパイラはそうではありません。理由は簡単です。 select
には1つの句しか含めることができません。そしてあなたの質問はそれらの2つを求めています。最初はgroup by
の名前です。 2番目は、すべての結果の集計です。
(あなたが意図しているように見えるよう)あなたのクエリを記述する適切な方法は、サブクエリを使用している:
select max(cnt)
from (select count(*) as cnt
from emp1
group by name
) t
これは、標準SQLを使用して完全に合理的な解決策です。他の答えは、limit
節を使用して解決策を提案しました。これはもう少し効率的です。
***Example: 1***
SELECT *
FROM customer
WHERE customer.ID IN
(SELECT customer_id
FROM (SELECT customer_id, MAX(cust_count)
FROM (SELECT customer_id,
COUNT(customer_id)
AS cust_count
FROM `order`
GROUP BY customer_id) AS cust_count_tbl) AS cust_tbl);
***Example -2***
SELECT *
FROM customer
LEFT JOIN
(SELECT customer_id, COUNT(customer_id) AS cc
FROM `order`
GROUP BY customer_id
ORDER BY cc DESC
LIMIT 1) AS kk
ON customer.ID = kk.customer_id
WHERE kk.customer_id = customer.ID;
提供されたコードから、同名の従業員のうち最も高い人数を選択したいと考えています。
クエリの問題は、複数のレベルの集計を1つのスコープに適用しようとしていることです。
はこれを試してみてください:
SELECT MAX(Total) FROM (SELECT COUNT(*) AS Total FROM emp1 GROUP BY name) AS Results
...またはこの:
SELECT COUNT(name) FROM emp1 GROUP BY name ORDER BY COUNT(name) DESC LIMIT 1
両方のクエリは同じ結果を返しますが、その実装が異なっています。
あなたの中で最も速い方、または好きな方を使用してください。
私たちが特にペタンティックでない限り、私はこれが答えを与えると思う。限界による注文はもっと普通になるだろう – Strawberry
テーブルに 'name'が同じ値を持つ行がいくつかあるとします。彼は最大数の行を持つ 'name'を見つけたいと思っています。 –
あなたは 'name'を数えようとしていますか? – SOfanatic
同じスコープ内で集約を集計することはできません。 – Strawberry