2009-08-11 9 views
13
私は結果を引き、引かれるどのように多くのそれぞれの名前のカウントが、グループ化せずにしたい

...例えばMySQL:グループ化せずに項目を数えますか?

私はこれをしたい:これに代えて

John Doe 3 
John Doe 3 
John Doe 3 
Mary Jane 2 
Mary Jane 2 

John Doe 3 
Mary Jane 2 

それは理にかなっていますか?

ありがとうございました。

+1

でグループをしていない理由は何ですか?元のテーブルをそのテーブルのクエリでグループに結合することで、必要な出力を得ることができます。 – pjp

+1

pjp - 私は彼が 'GROUP BY'の使用に問題があったとは思わないが、最終的な出力をグループ化したくないと思った。 –

+0

はいLuckyLindyは正しいです。 –

答えて

10
SELECT b.name, a.the_count 
FROM 
    some_table b, 
    (SELECT name, COUNT(*) AS the_count 
    FROM some_table 
    GROUP BY name) AS a 
WHERE b.name = a.name 
+0

私の答えと同じですが、テーブルのネーミングが好きです。 – pjp

+1

haha​​、yeah ... some_tableとA/Bはあまり説明的ではありません;) –

2
SELECT mo.*, 
     (
     SELECT COUNT(*) 
     FROM mytable mi 
     WHERE mi.name = mo.name 
     ) 
FROM mytable mo 
+0

'MOを選択します。*、 ( SELECT COUNT(*) MYTABLE MI mi.name = mo.name及び= 1及び2 = 2及び3 = 3 FROM) MYTABLE MO WHERE mi.name FROM = mo.nameおよび1 = 1および2 = 2および3 = 3 'はDRYに違反する。 'where'節を繰り返さなくても、どうすればいいのですか? – Pacerier

+0

@Pacerier:一時テーブルを作成し、最初に結果を書き込みます。他のシステムでは、CTEを書くことができますが、MySQLはそれらをサポートしていません。 – Quassnoi

+0

一時テーブルは良い解決策ですか?私たちはカーソルを使うべきではありませんか? – Pacerier

0
SELECT `name`, 
    (
     SELECT COUNT(*) 
     FROM `table` AS `alt` 
     WHERE `alt`.`name` = `table`.`name` 
    ) AS `num` 
FROM `table` 
2

あなたはサブクエリを使用したくない場合は、そのようにそれ自体にテーブルを結合することができます。サブクエリを必要とする 。おそらく、このような何か:

SELECT t1.name, COUNT(t2.name) 
FROM my_table AS t1 
INNER JOIN my_table AS t2 ON (t1.primary_key_field = t2.primary_key_field) 
WHERE some_conditions 
GROUP BY t1.name 
2

これはgroup byを使用していますが、あなたが望む形式で出力を取得します。

SELECT Name, NG.NameCount 
FROM Names 
INNER JOIN 
    (SELECT Name, Count(1) As NameCount 
    FROM Names 
    GROUP BY Name) NG 
ON Names.Name = NG.Name 
関連する問題