2

次の表を使用して、carCode 列から一意の電子メール アドレスを持つすべてのエントリを選択しようとしています。これに対する SQL 選択ステートメントは何になるでしょうか? 次のことを試しましたが、うまくいかないようです。

SELECT DISTINCT carCode, emailAddress, COUNT( * ) AS count
FROM myTable
WHERE (
carCode != ''
)
GROUP BY carCode;

テーブルの列は次のとおりです。

ID | carCode | emailAddress | fName | lName

そして、次の例を考えてみましょう:

1 | cc001 | a@b.com | fname1| lname1
2 | cc001 | a@b.com | fname2 | lname2
3 | cc001 | b@b.com | fname3 | lname3
4 | cc001 | c@b.com | fname4 | lname4

行 1、3、4 のみ、または 2、3、4 を返す必要があります。これは、1 と 2 のコードと電子メール アドレスが同じであるためです。

お知らせ下さい。

PS 明確にするために、私は車のコードのすべてのインスタンスをカウントしようとしていますが、同じ車のコードに対して重複する電子メール アドレスが見つかった場合、その電子メール アドレスは 1 回だけカウントします。これは私が達成しようとしていることを明確にしていますか?

4

6 に答える 6

1

You need a having clause to eliminate row 1 (it has duplicates):

SELECT carCode, emailAddress, 1 as cnt
FROM myTable
WHERE carCode != ''
GROUP BY carCode, emailaddress;
having count(*) = 1

For your revised question, the answer is simply a group by:

SELECT carCode, emailAddress, count(*) as cnt
FROM myTable
WHERE carCode != ''
GROUP BY carCode, emailaddress;
于 2013-01-23T18:27:21.937 に答える
0

これを試して...

SELECT  carCode, emailAddress, count(*) AS count
FROM myTable
WHERE carCode != ''
GROUP BY carCode, emailAddress
于 2013-01-23T18:26:22.517 に答える
0

try this

SELECT DISTINCT  emailAddress, carCode,  COUNT( * ) AS count
FROM myTable
WHERE (
carCode != ''
)
GROUP BY carCode;

cheers :)

于 2013-01-23T18:27:42.827 に答える
0

Add emailAddress to the GROUP BY, remove the DISTINCT:

SELECT carCode, emailAddress, COUNT( * ) AS count
FROM myTable
WHERE carCode != ''
GROUP BY carCode, emailAddress;
于 2013-01-23T18:27:51.243 に答える
0

実際にはDISTINCTここに はまったく必要ありません。個別の車のコードと電子メール アドレスの組み合わせごとにレコード数を取得する場合は、carCode と emailAddress の両方でグループ化する必要があります。

SELECT carCode, emailAddress, count(ID) as `count`
FROM myTable
WHERE carCode <> ''
GROUP BY carCode, emailAddress
于 2013-01-23T18:28:21.483 に答える
0

簡単な方法は、LEFT JOIN;を使用して行うことです。より低い ID と同じコード/電子メールを持つ行を持たないすべての行を返すだけです。

SELECT * 
FROM myTable a
LEFT JOIN myTable b
  ON a.emailAddress = b.emailAddress
 AND a.carCode = b.carCode
 AND a.ID > b.id
WHERE b.id IS NULL

テスト用の SQLfiddle

このアプローチの利点は、結果の完全な行を取得できることです。コードと電子メールだけが本当に必要な場合は、GROUP BY他の多くの回答が示唆するようにを使用する必要があります。

于 2013-01-23T18:35:40.837 に答える