Hatena::Diary::Neko::kak 500 Internal Server Error - countしたものにorder by
http://en.yummy.stripper.jp/?eid=448071
DBICではたぶん発行するSQLのカラムに別名をつけられないみたいなので
スカラーリファレンスでしかたないんじゃないすかね。
同じことで悩んだ時期もありましたが、いろいろ試してみた結果 order by 句に count(hoge) そのものを指定できることがわかりました。(少なくとも MySQL と SQLite で動作確認済み)
$rs = $schema->search(
{},
{ select => [ 'link', { count => 'entry' } ],
group_by => [qw/ link /],
order_by => 'count(link) DESC',
page => $page,
rows => $rows_per_page }
);
そんなの知るわけないじゃんと思ってたらやはり SQL92 の仕様的には order by 句には sort_key が、そして sort_key は column_name か unsigned_integer となるので order by count(hoge) は問題みたいですが、SQL99 以降ではなんやかんやで order by count(hoge) でも問題ないのですね。へぇー。
以下、SQL99 での sort_key 定義から count(hoge) まで。
<sort key> ::= <value expression>
<value expression> ::=
<numeric value expression>
| <string value expression>
| <datetime value expression>
| <interval value expression>
| <boolean value expression>
| <user-defined type value expression>
| <row value expression>
| <reference value expression>
| <collection value expression>
<collection value expression> ::= <value expression primary>
<value expression primary> ::=
<parenthesized value expression>
| <nonparenthesized value expression primary>
<nonparenthesized value expression primary> ::=
<unsigned value specification>
| <column reference>
| <set function specification>
| <scalar subquery>
| <case expression>
| <cast specification>
| <subtype treatment>
| <attribute or method reference>
| <reference resolution>
| <collection value constructor>
| <routine invocation>
| <field reference>
| <element reference>
| <method invocation>
| <static method invocation>
| <new specification>
<set function specification> ::=
COUNT <left paren> <asterisk> <right paren>
| <general set function>
| <grouping operation>
<general set function> ::=
<set function type> <left paren> [ <set quantifier> ] <value expression> <right paren>
<set function type> ::= <computational operation>
<computational operation> ::= AVG | MAX | MIN | SUM | EVERY | ANY | SOME | COUNT
■BNF Grammar for ISO/IEC 9075:1992 - Database Language SQL (SQL-92)
■BNF Grammar for ISO/IEC 9075:1999 - Database Language SQL (SQL-99)
