(これはコメントに基づいて、新たな答えであるとフィドルを見て)
ここでの問題は、MySQLが集約関数を処理する方法である - そして、誰も非標準的な方法と異なっています。
mysqlでは、集計関数を使用できます(count()は集計関数の例です)。 count(*)を使用すると、すべての(またはほとんどの?)他のSQL実装では、グループが必要になります。あなたがグループを持っているときは、そのグループの範囲を(例えば、名前でグループ化して)言わなければなりません。 すべての列は、集計関数の範囲または結果になければなりません。
あなたは範囲を持っていないので、mysqlはテーブル全体を想定しています。また、集計関数の結果でも、範囲(この場合は名前)でもないカラムがあるため、mysqlはそのカラムを集合関数の結果mysqlで指定されているかどうかわからない - 「max()」と言うことができる。 (かなりmax()です)。実際に実行されているSQLは
SELECT ANY_VALUE(name), COUNT(*)
FROM CUSTOMER
です。したがって、1つの名前しか表示されません。
MySQLのドキュメント - http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
私はMySQLが範囲内にない列のデフォルトの集計関数ANY_VALUE()
を使用することがわかり上記を読んだ後。
あなただけの各行の顧客数の合計をしたい場合は、あなたが構文、GROUP BYを必要としない。このように、この
SELECT DISTINCT NAME, COUNT(NAME) OVER() AS CustomerCount
FROM CUSTOMER
を行うことができます。カバーの下では、おそらく@GordonLinoffの答えと同じことをしているでしょう。
これは、グループごとの仕組みをより明確にするために追加したものです。
エラーは何ですか? – nicomp
おそらく、あなたはSQL Serverを使用しています。デフォルト設定では、MySQLはエラーを生成しません。 –
実際には、最初の顧客名の横に合計数が返ってくると思います。私たちが望むのは、お客様名の完全な一覧であり、それぞれの顧客名の総数がそれに並んでいます。だから私は集計を使用して完全な顧客名リストが崩壊した理由を理解していない – nsledeski