0

ここに新しいSQL'erがあります。学校の課題では、クエリの正確性をテストできるように、質問にテーブルを作成することにしました。

質問の 1 つは、同じオフィスを共有しているすべての従業員を単純に表示することです。簡単だと思います

SELECT office, name
 FROM my_db.employee
 GROUP BY office;

しかし、これを実行すると、すべてがオフィスごとにグループ化されているわけではなく、各一意のオフィスの最初のタプルのみが返されます。

私の論理に何か問題がありますか?

4

4 に答える 4

1

group by ステートメント内にある列、または集計関数 (sum、count など) を使用している列のみを選択できます。

そう、

select office, count(name) from my_db.employee group by office;

うまくいくでしょうが、もちろんそれはあなたが望むものではありません。

次のような単純なものが必要な場合があります

select office, name from my_db.employee order by office

これは、オフィスごとに「グループ化」されていることを示します。GROUP BY では、SQL が GROUP BY 変数 [s] ごとに 1 つの行のみを発行する必要があります。これは、割り当てが求める意味での「グループ化」ではないと思います。

于 2013-02-18T03:56:15.470 に答える
1

SQL の初心者として、何が求められているかを区別する方法を学ぶ必要があります...

Office "X" で働くすべての人が必要です (WHERE 句を使用します -- 興味のある Office = 'X')

各オフィスでどのように機能するかを知りたいです(GROUP BY句を使用し、「グループ化」しているすべてのフィールドを含めます)。

Group By は、共通に必要ないくつかの列で集計を行うことに関連付けられています。ディーラーの車の販売台数。1 か月あたりの販売代理店の車の販売台数... モデル車両ごとの月あたり。

集計を行う場合、これらは通常、MIN()、MAX()、SUM()、AVG() などに関連付けられます。多くのエンジンでのグループ化では、グループ化のためにすべての非集計フィールドをリストする必要があります。

Explosion Pills からの回答は、おそらくあなたが望むものに最も近く、数値または同等ではない集計関数 (min()、max() など) の例外です。Group_Concat() は、文字列がすべて同じ「グループ」分類 (オフィスなど) にある限り、文字列のリストを次々に作成するようにエンジンに指示します。

あなたの教育を頑張ってください、そして一緒に助けることができる多くの人がここにいます.

于 2013-02-18T04:18:21.633 に答える
0

集約フィールドを除いて、SELECT 部分のすべてが GROUP BY 部分に表示される必要があります。つまり、「オフィス、名前」を選択していますが、「オフィス」によるグループ化のみです。「オフィス、名前」でグループ化する必要があります。

于 2013-02-18T03:55:53.000 に答える
0

あなたが受け取った質問は、行を視覚的に検査して誰がどのオフィスにいるかを確認したり、MySQL 以外の言語で非常に簡単に集計したりできるため、データをどのように表示するかについて少し不明確です。多分彼はこのようなものを望んでいますか?

SELECT
    office, GROUP_CONCAT(name)
FROM
    my_db.employee
GROUP BY
    office
于 2013-02-18T03:59:10.923 に答える