2016-05-06 4 views
1

私はたくさんのデータを入力してアンドロイドアプリを作成しています。sort_androidのgroup_byアイテムへのSqlクエリ

は今、私はちょうど私が、すべてのデータが表示されている画像、の最初の部分を作っ enter image description here

下の画像の上のようないくつかのデータを表示する必要があります。今度は、データを並べ替えて集計する必要があります。同じグレードのアイテムがある場合は、それらを同じ行の下に配置し、それらの数を数え、その質量と価格を合計する必要があります。

これは私がitemsListを表示していますコードの一部です:

public class LogsRecapitulation extends AppCompatActivity { 

    private ListView mainListView; 
    private BaseAdapter listAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_listview); 
     mainListView = (ListView) findViewById(R.id.ListViewItem); 

     //recieve RecepitID in displayLogs.activity 
     final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID")); 
     List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).execute(); 


     listAdapter = new RecapitulationArrayAdapter(logsList); 
     mainListView.setAdapter(listAdapter); 
    } 

    private class RecapitulationArrayAdapter extends BaseAdapter { 
     private LayoutInflater inflater; 
     private List<Logs> logsList; 

     public RecapitulationArrayAdapter(List<Logs> logsList) { 
      inflater = LayoutInflater.from(LogsRecapitulation.this); 
      this.logsList = logsList; 
     } 

     @Override 
     public int getCount() { 
      return logsList.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      return logsList.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      return logsList.get(position).getId(); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       convertView = inflater.inflate(R.layout.logs_recapitulation, parent, false); 
      } 
      Logs log = logsList.get(position); 
      ((TextView) convertView.findViewById(R.id.rec_log_sort)).setText(log.sort_id); 
      ((TextView) convertView.findViewById(R.id.rec_log_class)).setText(log.grade); 
      ((TextView) convertView.findViewById(R.id.rec_log_count)).setText(String.valueOf(logsList.size())); 
      ((TextView) convertView.findViewById(R.id.rec_logs_mass)).setText(String.format("%.2f m3", log.getM3())); 

      if (log.receipt.priceType.equals("Na panju")) { 
       ((TextView) convertView.findViewById(R.id.rec_log_price_default)).setText(String.valueOf(log.price.stumpPrice_kn)); 
      } else { 
       ((TextView) convertView.findViewById(R.id.rec_log_price_default)).setText(String.valueOf(log.price.roadPrice_kn)); 
      } 

      if (log.receipt.priceType.equals("Na panju")) { 
       ((TextView) convertView.findViewById(R.id.rec_calculated_price)).setText(String.format("%.2f KN", log.price.stumpPrice_kn * log.getM3())); 
      } else { 
       ((TextView) convertView.findViewById(R.id.rec_calculated_price)).setText(String.format("%.2f KN", log.price.roadPrice_kn * log.getM3())); 
      } 

      return convertView; 
     } 
    } 

この上位コードは非常に重要な、しかし、私にとってより重要ではないにソートすることにより、この要約およびグループ項目を作り、各ソートにされますグレードによって

質問:アイテムをソート順にグループ化する必要があります。各ソートグループでグレード別にグループ化する必要があります(イメージアップと同じです)。 助けを歓迎します!以下のような表を作成

SELECT Sort, Grade, COUNT(DISTINCT ID) AS Pieces, ROUND(SUM(Mass), 2) AS 
TotalMass, Price, SUM(MassPrice) AS TotalMassPrice 
FROM LogsTable 
GROUP BY Sort, Grade 
ORDER BY Sort DESC, Grade DESC; 

:私はあなたのデータベーススキーマへのアクセスができますが、以下のように「ソート」することによって、あなたのグループがあり、このような結果を生成するために使用することがありますSQLクエリを持っていない

答えて

1

次ソートグレードの所定の組み合わせのために価格が一定でない場合

Group table

このクエリに問題があります。その場合、例のようにを使用する代わりにAVG(Price) AS AveragePriceを使用することがあります。

「総計」の行は、次のようなSQLクエリを生成することができます。次のような表を作成

SELECT COUNT(DISTINCT ID) AS TotalPieces, ROUND(SUM(Mass), 2) AS GrandTotalMass, AVG(Price) AS AveragePrice, SUM(MassPrice) AS GrandTotalMassPrice 
FROM LogsTable; 

Grand total table

それは数という私には明らかですあなたのスクリーンショットの総行に実際に報告されるのは、平均価格ではなく、他のいくつかの指標です。

これらのSQLクエリを、選択したクエリフレームワークに簡単に変換できます。あなたがこれをどうやって行うのかについての知識を実証しているように私はそうしていません。

関連する問題