私が正しく理解している場合は、各行がピンコードの後に、関心のある各タイプのポイントの番号が続く結果セットが必要です。
指定したターゲット結果は、長くて自然な英語の文字列である必要があるように見えます。ここまでは説明しませんが、コードで使用できるものを提供します。
最終的な結果は次のとおりです。
pincode | hospitals | temples | masjids | companies | churches | schools
560038 | 2 | 1 | 0 | 0 | 1 | 0
560049 | 0 | 0 | 1 | 1 | 0 | 1
562129 | 0 | 0 | 0 | 0 | 0 | 1
注:この方法で結果を要求することは理想的ではないと思います。後で新しいタイプの関心のあるポイントが追加された場合は、クエリを書き直す必要があります。しかし、これが質問なので、ここに答えがあります:
これを行うには2つの方法があり、どちらも対象のポイントのタイプごとにcount(*)を実行するサブクエリを使用します。最初のオプションは、クエリのSELECT部分にサブクエリを埋め込むことです。2番目のオプションは、サブクエリから派生テーブルを作成し、それらを結合することです。
オプション1は次のとおりです。
SELECT
mainTbl.pincode,
(SELECT count(*) FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 604) as hospitals,
(SELECT count(*) FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 1306) as temples,
(SELECT count(*) FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 1305) as masjids,
(SELECT count(*) FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 1302) as churches,
(SELECT count(*) FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 204) as schools,
(SELECT count(*) FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 102) as companies
FROM myTable mainTbl
WHERE mainTbl.city_id = ?
そしてオプション2:
SELECT
mainTbl.pincode,
hospitalsTbl.hospitals,
templesTbl.temples,
masjidsTbl.masjids,
churchesTbl.churches,
schoolsTbl.schools,
companiesTbl.companies
FROM myTable mainTbl
JOIN (SELECT count(*) as hospitals, pincode FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 604) hospitalsTbl ON hospitalsTbl.pincode = mainTbl.pincode
JOIN (SELECT count(*) as temples, pincode FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 1306) templesTbl ON templesTbl.pincode = mainTbl.pincode
JOIN (SELECT count(*) as masjids, pincode FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 1305) masjidsTbl ON masjidsTbl.pincode = mainTbl.pincode
JOIN (SELECT count(*) as churches, pincode FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 1302) churchesTbl ON churchesTbl.pincode = mainTbl.pincode
JOIN (SELECT count(*) as schools, pincode FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 204) schoolsTbl ON schoolsTbl.pincode = mainTbl.pincode
JOIN (SELECT count(*) as companies, pincode FROM myTable WHERE pincode = mainTbl.pincode AND city_id = mainTbl.city_id AND poi_id = 102) companiesTbl ON companiesTbl.pincode = mainTbl.pincode
WHERE mainTbl.city_id = ?
ご覧のとおり、クエリは非常に冗長です。このようなものを持っている方がはるかに良いです:
SELECT count(*) as num_poi, poi_id, pincode
FROM myTable
WHERE city_id = ?
GROUP BY poi_id, pincode
次に、コードで1行の行を作成します。