select t3.name, sum(t3.prod_A) as Prod_A, sum(t3.prod_B) as Prod_B, sum(t3.prod_C) as Prod_C, sum(t3.prod_D) as Prod_D, sum(t3.prod_E) as Prod_E
from
(select t2.name as name,
case when t2.prodid = 1 then t2.counts
else 0 end prod_A,
case when t2.prodid = 2 then t2.counts
else 0 end prod_B,
case when t2.prodid = 3 then t2.counts
else 0 end prod_C,
case when t2.prodid = 4 then t2.counts
else 0 end prod_D,
case when t2.prodid = "5" then t2.counts
else 0 end prod_E
from
(SELECT partners.name as name, sales.products_id as prodid, count(products.name) as counts
FROM test.sales left outer join test.partners on sales.partners_id = partners.id
left outer join test.products on sales.products_id = products.id
where sales.partners_id = partners.id and sales.products_id = products.id group by partners.name, prodid) t2) t3
group by t3.name ;
Похоже, вы не проверяете songs[probe].getYear() == year
во время цикла while в findYear
.
Может быть:
public static int findYear(MusicV3[] songs, int year) {
int high = songs.length;
int low = -1;
int probe = -1;
while (high - low > 1) {
probe = (high + low) / 2;
int probeSongYear = songs[probe].getYear();
if (probeSongYear == year) {
break;
} else if (probeSongYear > year)
high = probe;
else
low = probe;
}
if (probe >= 0 && songs[probe].getYear() == year) {
while (songs[--probe].getYear() == year) {
}
return probe + 1;
}
return -1;
}
Не забудьте добавить «find =
», как показано ниже:
System.out.println("Searching for the year: 2014");
find = /* <--- ADD THIS */ findYear(songs, 2014);
Чтобы напечатать все песни (как требуется в комментарии) для рассматриваемый год:
System.out.println("Searching for the year: 2014");
find = findYear(songs, 2014);
if (find != -1) {
System.out.println("We found songs made in the year 2014 in the song list: ");
while (sortedSongs[find].getYear() == 2014) {
System.out.println(sortedSongs[find++]);
}
}
По моему мнению, реализация каждой вещи самостоятельно - не всегда лучший подход.
Что касается меня, я бы сделал HashMap<Integer, ArrayList<MusicV3>>
, который будет хранить год для списка песен.
Так будет выглядеть окончательный код.
HashMap<Integer, ArrayList<MusicV3>> songs = new HashMap<>();
void addSong(MusicV3 song) {
ArrayList<MusicV3> list = songs.get(song.year);
if (list == null) {
list = new ArrayList<>();
songs.put(song.year, list);
}
list.add(song);
}
ArrayList<MusicV3> findSongsByYear(int year) {
ArrayList<MusicV3> list = songs.get(year);
if (list != null)
return list;
else
return new ArrayList<>();
}