タグ付けされた質問 「aggregate-functions」

12
SQL Server:PARTITION BYとGROUP BYの違い
私はGROUP BY何年にもわたってすべてのタイプの集約照会に使用してきました。最近、私はPARTITION BY集計を実行するために使用するいくつかのコードをリバースエンジニアリングしています。私が見つけることができるすべてのドキュメントを読むとPARTITION BY、それはに似ているようですがGROUP BY、おそらく追加の機能が少し追加されていますか?それらは同じ一般的な機能の2つのバージョンですか、それとも完全に異なるものですか?

7
GROUP BY句で使用するか、集計関数で使用する必要があります
この発信者「makerar」のようなテーブルがあります cname | wmname | avg --------+-------------+------------------------ canada | zoro | 2.0000000000000000 spain | luffy | 1.00000000000000000000 spain | usopp | 5.0000000000000000 そして、各cnameの最大平均を選択します。 SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname; エラーになりますが ERROR: column "makerar.wmname" must appear in the GROUP BY clause or be used in an aggregate function …

30
SQL Serverで中央値を計算する関数
MSDNによると、MedianはTransact-SQLの集計関数として使用できません。ただし、この機能を作成できるかどうかを確認したいと思います(Create Aggregate関数、ユーザー定義関数、またはその他の方法を使用)。 これを行うには(可能な場合)最良の方法は何ですか?集約クエリで中央値(数値データ型を想定)の計算を可能にしますか?

6
複数の関数を複数のgroupby列に適用する
ドキュメントには、キーとして、出力列名で辞書を使用して、一度にGROUPBYオブジェクト上で複数の機能を適用する方法を示しています。 In [563]: grouped['D'].agg({'result1' : np.sum, .....: 'result2' : np.mean}) .....: Out[563]: result2 result1 A bar -0.579846 -1.739537 foo -0.280588 -1.402938 ただし、これはSeries groupbyオブジェクトでのみ機能します。そして、dictが同様にgroupby DataFrameに渡されると、キーは、関数が適用される列名であると想定します。 私がしたいことは、複数の関数を複数の列に適用することです(ただし、特定の列は複数回操作されます)。また、一部の関数はgroupbyオブジェクトの他の列に依存します(sumif関数など)。私の現在の解決策は、列ごとに行き、上記のコードのようなことをし、他の行に依存する関数にラムダを使用することです。しかし、これには長い時間がかかります(groupbyオブジェクトを反復処理するには長い時間がかかると思います)。一度の実行でgroupbyオブジェクト全体を反復処理するように変更する必要がありますが、これをパンダに幾分きれいに実行する組み込みの方法があるかどうか疑問に思っています。 たとえば、私は次のようなことを試しました grouped.agg({'C_sum' : lambda x: x['C'].sum(), 'C_std': lambda x: x['C'].std(), 'D_sum' : lambda x: x['D'].sum()}, 'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...) しかし、予想どおり、KeyErrorが発生します(DataFrameからagg呼び出された場合、キーは列である必要があるため)。 私がやりたいことを行うための組み込みの方法はありますか、またはこの機能が追加される可能性がありますか、それとも手動でgroupbyを反復処理する必要があるだけですか? ありがとう

7
SQL OVER()句-いつ、なぜ役立つのですか?
USE AdventureWorks2008R2; GO SELECT SalesOrderID, ProductID, OrderQty ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total' ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg' ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count' ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min' ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max' FROM Sales.SalesOrderDetail WHERE SalesOrderID IN(43659,43664); その条項について読みましたが、なぜ必要なのかわかりません。関数Overは何をしますか?何をしPartitioning Byますか?なぜ書き込みでクエリを実行できないのGroup By SalesOrderIDですか?

6
「ゼロ」/「0」の結果をCOUNT集計に含める方法は?
少しSQLに行き詰まっているところです。質問をきちんと表現できるとは思いません。そのため、お見せしましょう。 私は2つのテーブルを持っています。1つは人と呼ばれ、もう1つは予約と呼ばれます。人が持っている予定の数を返すようにしています(ゼロの場合も含む)。予約person_idにはが含まれ、person_id予約ごとにあります。したがってCOUNT(person_id)、賢明なアプローチです。 クエリ: SELECT person_id, COUNT(person_id) AS "number_of_appointments" FROM appointment GROUP BY person_id; person_idが持つ予定の数を正しく返します。ただし、アポイントメントが0の人は返されません(明らかに、そのテーブルにはないため)。 ステートメントを調整してpersonテーブルからperson_idを取得すると、次のような結果になります。 SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments" FROM appointment JOIN person ON person.person_id = appointment.person_id GROUP BY person.person_id; ただし、これはまだ予定のあるperson_idのみを返し、予定が0の人の戻りである私が欲しいものは返しません! 何か提案がありますか?

7
文字列を連結/集約する最適な方法
異なる行の文字列を1つの行に集約する方法を見つけています。私はさまざまな場所でこれを行うことを考えているので、これを容易にする機能があると便利です。私が使用して解決策を試してみたCOALESCEとFOR XML、彼らはちょうど私のためにそれをカットしないでください。 文字列の集約は次のようになります。 id | Name Result: id | Names -- - ---- -- - ----- 1 | Matt 1 | Matt, Rocks 1 | Rocks 2 | Stylus 2 | Stylus 私は見ました CLR定義の集約関数の代替としてのCOALESCEとFOR XML、どうやらSQL Azureが ありません、私はそれを使用することができるということの全体の多くを解決するだろう知っているので、私にとっては苦痛であるCLR-定義されたものを、サポート私にとっての問題。 すべての可能な回避策はありますか(CLRとして最適とはならないかもしれないが、同様に最適な方法ちょっと私は私のものを集約するために使用できることを、私は私が得ることができるもの取りますよ)?

6
MySQLの「Group By」と「Order By」
電子メールのテーブルから一連の行を選択し、送信者ごとにグループ化できるようにしたい。私のクエリは次のようになります: SELECT `timestamp`, `fromEmail`, `subject` FROM `incomingEmails` GROUP BY LOWER(`fromEmail`) ORDER BY `timestamp` DESC クエリはほぼ期待どおりに機能します。電子メールでグループ化されたレコードが選択されます。問題は、件名とタイムスタンプが特定の電子メールアドレスの最新のレコードに対応していないことです。 たとえば、次のように返されます。 fromEmail: john@example.com, subject: hello fromEmail: mark@example.com, subject: welcome データベースのレコードが次の場合: fromEmail: john@example.com, subject: hello fromEmail: john@example.com, subject: programming question fromEmail: mark@example.com, subject: welcome 「プログラミングの質問」の件名が最新の場合、電子メールをグループ化するときにMySQLにそのレコードを選択させるにはどうすればよいですか?

24
別個の値を返すOracleのLISTAGG
OverаэтотвопросестьответынаStack Overflowнарусском:КакфункциейLISTAGGвернутьзначениябезповторений? LISTAGGOracleで関数を使用しようとしています。その列の個別の値のみを取得したいと思います。関数やプロシージャを作成せずに個別の値のみを取得できる方法はありますか? col1 col2 Created_by 1 2スミス 1 2ジョン 1 3アジェイ 1 4ラム 1 5ジャック col1とLISTAGGcol2 を選択する必要があります(列3は考慮されません)。そうすると、LISTAGG次のような結果になります。[2,2,3,4,5] ここで重複する「2」を削除する必要があります。col1に対してcol2の個別の値のみが必要です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.