web-dev-qa-db-ja.com

distinctとsumを使用したSQLクエリ

medleyscolors、およびfruitsを組み合わせた次のratingsテーブルがあります。

[medleys]
medley_id   |   color   |   fruit   |   rating
==============================================
1               red         Apple       25
2               blue        pear        5
3               green       Apple       12
4               red         Apple       10
5               purple      kiwi        5
6               purple      kiwi        50
7               blue        kiwi        3
8               blue        pear        9

私は、すべての一意/異なるcolor-_fruitペアを組み合わせ、各ペアの個々のrating値を合計するANSI準拠のSQLクエリを作成しようとしています。したがって、上のテーブルでクエリを実行すると、次の結果セットが生成されます。

[query]
color   |   fruit   |   sum
===========================
red         Apple       35
blue        pear        14
blue        kiwi        3
green       Apple       12
purple      kiwi        55

したがって、クエリはテーブルに2つのred-Appleペアがあることを確認するため、red-Appleペアに対して1つの結果を作成します。構成要素ratings(25 + 10 = 35)などを合計します。

distinct color/fruitの値を選択する必要があると確信していますが、同じ「レベル/スコープ」で評価を集計する方法がわかりません。

SELECT
    distinct(color, fruit), sum(rating)
FROM
    medleys

順序は関係ありません。 colorfruitはVARCHAR(50)sであり、ratingはINTです。前もって感謝します!

14
user1768830
SELECT color, fruit, sum(rating)
FROM medleys
GROUP BY color, fruit

Distinctは、個別の要素を選択するために使用されますが、集約する必要はありません。そのためには、GROUP BYおよび集約関数(SUM)。

25
Andrey

distinctはまったく必要ありません。 group byが必要です:

select color, fruit, sum(rating)
from medleys
group by color, fruit

私はこの間違いが起こるのを見ているので、答えています。一般に、SQLではselect distinctはまったく必要ありません。代わりにいつでもgroup byを使用できます。 Distinctは、便利な省略形としてgroup byの後に導入する必要があります。

4
Gordon Linoff
SELECT `color`,`fruit`,SUM(`rating`)
FROM Medleys
GROUP BY `color`,`fruit`

SQL Fiddle例

1
rbedger

これはあなたの質問に答えるはずです:


SELECT color, fruit, sum(rating) as [sum]
FROM medleys
GROUP BY color, fruit
ORDER BY color
0
ljh