...例えばMySQL:グループ化せずに項目を数えますか?
私はこれをしたい:これに代えて
John Doe 3
John Doe 3
John Doe 3
Mary Jane 2
Mary Jane 2
:
John Doe 3
Mary Jane 2
それは理にかなっていますか?
ありがとうございました。
...例えばMySQL:グループ化せずに項目を数えますか?
私はこれをしたい:これに代えて
John Doe 3
John Doe 3
John Doe 3
Mary Jane 2
Mary Jane 2
:
John Doe 3
Mary Jane 2
それは理にかなっていますか?
ありがとうございました。
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
私の答えと同じですが、テーブルのネーミングが好きです。 – pjp
haha、yeah ... some_tableとA/Bはあまり説明的ではありません;) –
SELECT mo.*,
(
SELECT COUNT(*)
FROM mytable mi
WHERE mi.name = mo.name
)
FROM mytable mo
'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
@Pacerier:一時テーブルを作成し、最初に結果を書き込みます。他のシステムでは、CTEを書くことができますが、MySQLはそれらをサポートしていません。 – Quassnoi
一時テーブルは良い解決策ですか?私たちはカーソルを使うべきではありませんか? – Pacerier
SELECT `name`,
(
SELECT COUNT(*)
FROM `table` AS `alt`
WHERE `alt`.`name` = `table`.`name`
) AS `num`
FROM `table`
あなたはサブクエリを使用したくない場合は、そのようにそれ自体にテーブルを結合することができます。サブクエリを必要とする 。おそらく、このような何か:
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
これは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
でグループをしていない理由は何ですか?元のテーブルをそのテーブルのクエリでグループに結合することで、必要な出力を得ることができます。 – pjp
pjp - 私は彼が 'GROUP BY'の使用に問題があったとは思わないが、最終的な出力をグループ化したくないと思った。 –
はいLuckyLindyは正しいです。 –