- 締切済み
集計について
TABLE "acces" cd(int)auto_increment usercd(int) accesday(datetime) があり、その中から DATE_FORMAT(vEntryDate,'%Y-%m-%d') = 'yyyy-mm-dd'; という条件にマッチするusercdの数を取得したいのですがどうしたらよいのでしょうか? 結果として usercd count a 100 b 200 というように日付ごとに検索をかけたいと思っています。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- shimix
- ベストアンサー率54% (865/1590)
ANo.1です。 みなさん指摘されてますように、typoがあると例示するのもアレなんですが(汗 SELECT usercd, count(*) as cnt FROM `acces` WHERE (DATE_FORMAT(accesday,'%Y-%m-%d') = '2008-05-16') GROUP BY `usercd`; phpMyAdminから実行してエラーになるのであれば、文法上のエラー内容と位置も表示されているハズです(near ~~とか)。それを参考に自分の間違いを推測・修正するしかないです。 ちなみに条件は、DATE_FORMATを通さずに当日0時以上&翌日0時未満にするのが楽じゃないでしょうか?最終的にはプログラムでSQL文を組み立てるんでしょうし・・。
- yambejp
- ベストアンサー率51% (3827/7415)
そもそもaccesってところから怪しい。 もしエラーがでるというならaccessとかのつづり間違いじゃない? 凡ミスがおおいという感想 命題ではusercdはintとかいてありますが、実際結果には、aとかbという 文字がはいっているし、#2の回答ではcdでgroup byしているけど group by usercdですね? #1の提示ミスも含めて、なにがあっているかわからないので、どこが 間違っているか指摘するのは非常に難しい。 それとgroup byで集計したときには、キーと集計以外のフィールドは 値が保証されないので、select *と書くのは禁物です。
- chukenkenkou
- ベストアンサー率43% (833/1926)
#1さんも指摘していますが、何が分からないのか具体的に説明してください。
- shimix
- ベストアンサー率54% (865/1590)
vEntryDateというのはテーブル定義に見当たりませんが、どの列になるんでしょう? select count(*) from を使うとして、結果セットがusercd別であれば、group by がusercdで、whereが日付一致の条件でいいと思いますが、どのあたりがわからないのでしょう?
補足
失礼しました。 vEntryDateではなくてaccesdayの間違いです。 すいません。
補足
SQL文の書き方がわかりません。 SELECT *, count(*) FROM `acces` WHERE DATE_FORMAT(accesday,'%Y-%m-%d') = '2008-05-16' GROUP BY `cd` でいいと思っているのですが、これをphpmyadminからSQL実行するとエラーになってしまします。