2011-07-20 45 views
1

私たちはグループ化されたときに正しく複数の列を注文する(MyISAMテーブル経由)GROUP_CONCATに依存しているいくつかのキーのクエリを持っている大規模なデータベースで働いています。基本的に、各行に正しいデータを確実に取得するようにします。例私は、各郵便番号にある特定の状態に持っているレコードの数を知りたいと思ったが、アドレスごとに1つのだけのレコードがあれば:Brighthouse group_concatの代替手段ですか?

私が持っている

SELECT state  AS state, 
     zip  AS zip, 
     COUNT(id) AS total 
FROM (SELECT CAST(Substring_index(GROUP_CONCAT(id ORDER BY state, zip, city, 
       address, 
         id), 
       ',', 1) 
       AS UNSIGNED) AS id, 
       CAST(Substring_index(GROUP_CONCAT(zip ORDER BY state, zip, city, 
       address 
         , id), 
       ',', 1 
       ) AS UNSIGNED) AS zip, 
       CAST(Substring_index(GROUP_CONCAT(state ORDER BY state, zip, city 
       , 
         address, id), 
       ',', 
       1) AS CHAR) AS state 
     FROM DATABASE.table 
     GROUP BY st, 
        zip, 
        city, 
        address) AS a 
GROUP BY zip 
ORDER BY zip 

(IDは一意符号なしの数値です) myisam、そして演奏するための同一のデータを持つbrighthouseデータベースを含む。私は単純な選択をやっている場合は、明らかにbrighthouseは、巨大なパフォーマンス上の利点を持っているので、私はbrighthouseスピードを活用することができ、同一の結果でクエリを実行する方法を見つけることを期待しています。

編集:自分自身を修正するには、私が以前に述べたようにInnoDBは、Brighthouseエンジンでこれと同じことを実現クエリをない見つけるしたいと思います。

+1

は、私が見ることができませんか? http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat – wonk0

+0

GROUP_CONCATはbrighthouseではサポートされていません:MySQLエンジンによって実行される照会構文はBrighthouseに実装されていません。 – Jeff

+1

InnoDBに言及しました。当然にInfobright/Brighthouseが手動 – wonk0

答えて

1

私は最終的に私が後だったものを得るためにいくつかのことを並べ替えることができ考え出しました。私の元の質問のクエリは、次のように書き直すことができます。

...同じ結果セットを許可し、Brighthouseエンジンを利用しました! GROUP_CONCAT()テーブルのエンジンに関連しているか:-)