-2

[i]次のような[/i]、特定のフィールドの値が表示される回数を数える必要があります。

Name    | Age | HowManyTimesTheNameRepeat  

Ghaleon | 21  | 3  
Ghaleon | 21  | 3  
Ghaleon | 21  | 3  
Bianca  | 20  | 2    
Bianca  | 20  | 2  
Carla   | 25  | 1

編集

私は物事を混乱させたと思います。これが私のコードです:

SELECT t1.matricula AS Matricula, t1.descricao_debito AS Descricao, t1.quantidade AS Qtd,(SELECT COUNT(t2.name) FROM table1 AS t2 WHERE t1.name= t2.name) As MesmoNome
FROM table1 AS t1 INNER JOIN table2 AS t2 ON t1.dados_bancarios = t2.codigo
WHERE t1.dados_bancarios > 0 AND t1.configuracao =  2 AND t1.remessa = 116
GROUP BY t1.nome_titular
HAVING COUNT(*) > 0

これは私が試したものなので、本当に必要なものは次のとおりです。

同じ名前が何回繰り返されるかを知る必要がありますが、すべての結果行を受け取る必要があるため、group by を使用できません。また、私のInnerJoinはフィールドによって起こりません。
出来ますか?

4

5 に答える 5

2

一部の回答では正しい結果が得られますが、何らかの理由で、それぞれがサブクエリを使用しています。

これは、テーブルが大きくなるにつれてコストが高くなる可能性があります!

これを行う別の方法を次に示します。

SELECT * 
 FROM test t 
 NATURAL JOIN 
 (SELECT name, count(name) FROM test GROUP BY name) AS t2;

このようにして、名前カウントのクエリはテーブル内のすべての行ごとに実行されるのではなく、1 回だけ実行されます。

これがパフォーマンスにどのように影響するかを示すSQLFiddleを次に示します。簡単なスキーマを作成し、テーブルに 190 行を入力しました。実行計画を確認することをお勧めします。このような小さなデータセットでも、違いは明らかです。サブクエリを含むバージョンは、実行に約 10 倍の時間がかかります。

于 2013-10-04T20:54:33.000 に答える
2

私は SQLite 3 にすばやくアクセスできましたが、これは MySQL でも同様に機能するはずです。

SELECT
    p1.Name,
    p1.Age,
    (SELECT count(p2.Name) FROM person AS p2 WHERE p1.Name == p2.Name) as QtdName
FROM person AS p1
于 2013-10-04T20:19:05.640 に答える
1
SELECT name, Count(name) As QtdName 
FROM table 
GROUP BY name 
于 2013-10-04T20:02:56.427 に答える