web-dev-qa-db-ja.com

2列でグループ化し、すべての行に総計を表示する

以下はリストデータです。

Code   ItemCount   Type      Amount 
----------------------------------------
B001    1          Dell         10.00
B001    1          Dell         10.00
B001    1          Apple        10.00
B001    2          Apple        20.00
B001    2          Apple        20.00
B114    1          Apple        30.50
B114    1          Apple        10.00

コードごと、タイプごとにグループ化してItemCountを合計し、すべての行でAmountの総計を取得する結果が必要です。

これは可能ですか?

Code   ItemCount    Type      Amount 
----------------------------------------
B001    2          Dell          20.00
B001    5          Apple         50.00
B114    2          Apple         40.50 
19
user2617053

してみてください:

SELECT
    Code,
    SUM(ItemCount) ItemCount,
    Type,
    SUM(Amount) Amount
FROM
    YourTable
GROUP BY Code, Type
ORDER BY Code
26
TechDo

これは宿題のように見えます。

(最初に質問を見たときにこれがMySQLとしてタグ付けされていると思っていたが、タイトルは明らかにMS SQLを示している)

MySQLの場合、 このクエリは、指定された結果セットを返します。

SELECT t.Code
     , SUM(t.ItemCount) AS ItemCount
     , t.Type
     , s.Amount AS Amount
  FROM mytable t
 CROSS
  JOIN ( SELECT SUM(r.Amount) AS Amount
           FROM mytable r
       ) s 
 GROUP
    BY t.Code
     , t.Type
 ORDER BY t.Code ASC, t.Type DESC

他のデータベースの場合は、MySQLの場合、列エイリアスの周りからバックティックを削除します。

大/小文字を保持する必要がある場合、Oracleの場合、識別子は二重引用符で囲まれます。 SQL Serverの場合、識別子は角括弧で囲まれています。 MySQLの場合、識別子はバックティックで囲まれます。

4
spencer7593

この簡単なソリューションを試すことができます:

select Code,sum(ItemCount),Type,sum(Amount) from table group by code,type

「グループ化」を理解すると便利になります

2
Pooja smithi

このクエリを試すことができます:

SELECT Code,SUM(ItemCount) AS ItemCount,Type,SUM(Amount) AS Amount
FROM
    table
GROUP BY Code, Type

これにより、適切な結果が得られます。 Codeではなく、TypeおよびItemCountでグループ化する必要があります。

1
Abubakkar

提供する金額はサンプルデータとは異なりますが、これはサンプルデータ値に対しては機能します。

SELECT Code, SUM(ItemCount) AS ItemCount, [Type], SUM(Amount) AS Amount 
FROM dbo.TestSubs GROUP BY Code,[Type] ORDER BY Code
0
andrewb

各行の実際の合計がアイテム数と金額の積であるという私の理解が正しい場合、以下のコードを使用できます。 @Abuのコードを使用しない場合。

;WITH cte AS
(
    SELECT Code, ItemCount, Type, Amount, ItemCount * Amount AS TotalAmount FROM <Table>
)
SELECT 
    Code,
    SUM(ItemCount),
    Type,
    SUM(TotalAmount)
FROM cte
GROUP BY Code, Type
0
hallie