sql >> データベース >  >> RDS >> Mysql

COUNT()がテーブルの1行のみを表示するのはなぜですか?

    COUNT() は、通常GROUP BYと組み合わされる集計関数です。 条項。

    curdate() 現在の日付を出力する日付関数です。

    (私が知る限り)MySQLだけがGROUP BYを使用せずにこの構文を許可します 句。提供しなかったため、COUNT(*) テーブル内の行の総数とownerをカウントします 列はランダムに選択されます/オプティマイザーのデフォルト/インデックスによって。

    これはあなたの質問です:

    select owner, count(*) 
    from pet
    group by owner;
    

    これは、オプティマイザーにの合計行をカウントするように指示します 所有者。

    group by句が言及されていない場合、集計関数はテーブルのデータ全体に適用されます。

    編集: 各行に適用されるカウントは、通常、COUNT()では実行できません。 通常、分析関数で使用されます-> COUNT() OVER(PARTITION...) 残念ながら、これはMySQLには存在しません。もう1つのオプションは、JOIN/CORRELATED QUERYを作成することです。 この追加の列について。

    別の編集: 各所有者の横にある合計数を知りたい場合は、サブクエリを使用できます:

    SELECT owner,
           (SELECT COUNT(*) FROM pet) as cnt
    FROM pet
    


    1. ブール列のSQLAlchemyfunc.count

    2. MySQLはNOTNULL制約を無視します

    3. SQLで二重バー(||)はどういう意味ですか?

    4. 1つのクエリでmysqlから複数の行を選択し、それらをphpで使用する方法