2017-03-22 17 views
1

は、私は次の出力を取得したいSQL合計の列

Email  | Value 
[email protected] | 10 
[email protected] | 20 
[email protected] | 30 

望ましい結果を(のみ[email protected]値を取ります一度、2回目の表に表示されているにもかかわらず):

Group | Email Count | Sum 
Y  | 1   | 10 
N  | 2   | 50 

ここで私は周り遊んでいたsqlfiddleです: http://sqlfiddle.com/#!9/c2a24d/8

+0

「a @ gmail.com」が「Y」と「N」と表示されるとどうなりますか?可能だ? –

+0

これはできません – NBC

答えて

1

あなたはSQLFiddleで閉じていました。あなたはちょうど別の選択に参加する必要があります。

SELECT 
e.Unsub as Unsub, 
count(e.email) as EmailCount, 
sum(c.sum) as EmailSum 
FROM CountTable c 
JOIN (select distinct email, Unsub from EmailsTable) e on c.email = e.email 
GROUP BY e.unsub 

SQLFiddle

+0

1) 'LEFT JOIN'は必要ありません。通常の' JOIN'が行います2) 'COUNT(DISTINCT'、'サブクエリ 'に' DISTINCT'を既に行っています)をしないでください –

+0

あなたは絶対に正しいです。クエリは機能しますが、最適化しませんでした。 – Ethilium

1

まず重複を削除し、その後の計算

SQL DEMO

SELECT filter.`Unsub`, COUNT(*), SUM(`sum`) 
FROM (
     SELECT DISTINCT `Unsub`, `email` 
     FROM EmailsTable) as filter 
JOIN CountTable  
    ON filter.`email` = CountTable.`email` 
GROUP BY filter.`Unsub` 

OUTPUT

を行います
| Unsub | COUNT(*) | SUM(`sum`) | 
|-------|----------|------------| 
|  N |  2 |   50 | 
|  Y |  1 |   10 |