Большой SQL-запрос базы данных для быстрого сбора данных [дубликат]

«Явный» тип в Java - это класс, который является неэквивалентным и имеет дело с «сырыми» объектами, а не с типичными типами типовых параметров.

Например, до того, как были доступны дженерики Java , вы должны использовать класс коллекции следующим образом:

LinkedList list = new LinkedList();
list.add(new MyObject());
MyObject myObject = (MyObject)list.get(0);

Когда вы добавляете свой объект в список, ему все равно, какой тип объекта он есть, и когда вы его получите из списка, вам нужно явно указать его на тот тип, который вы ожидаете.

Используя generics, вы удаляете «неизвестный» коэффициент, потому что вы должны явно указать, какой тип объектов может идти в списке:

LinkedList<MyObject> list = new LinkedList<MyObject>();
list.add(new MyObject());
MyObject myObject = list.get(0);

Обратите внимание, что с помощью дженериков вам не нужно бросать объект, исходящий из вызова get, сбор предварительно задан для работы с MyObject. Этот факт является основным движущим фактором для генериков. Он меняет источник ошибок времени выполнения во что-то, что можно проверить во время компиляции.

3
задан Code Prank 27 December 2013 в 09:56
поделиться

2 ответа

Ваша первая попытка была реальной. Но каждый post_id был умножен на число совпадений в insights, поэтому вам нужно использовать DISTINCT:

select type_name, count(distinct p.post_id), sum(likes), sum(comments)
from types t
left join posts p on t.type_id = p.post_type
left join insights i on p.post_id = i.post_id
group by type_name;

. Кроме того, вы можете группировать с подзапросом, который объединяет все идеи для того же поста:

select type_name, count(*), sum(likes), sum(comments)
from types t
left join posts p on t.type_id = p.post_type
left join (select post_id, sum(likes) likes, sum(comments) comments
           from insights
           group by post_id) i on p.post_id = i.post_id
group by type_name;

FIDDLE

3
ответ дан Barmar 21 August 2018 в 07:06
поделиться
  • 1
    Совокупные значения неверны. Сумма комментариев и комментариев составляет 63 и 28 для сообщения типа ссылки. – Code Prank 24 December 2013 в 09:59
  • 2
    первый выглядит лучше, я бы не стал вторым, если не было чего-то, чего я не вижу – hubson bropa 24 December 2013 в 10:00
  • 3
    @ShayanHusaini, когда я запускаю вашу первую попытку, я получаю 51 и 24, что выглядит правильно, да? – hubson bropa 24 December 2013 в 10:01
  • 4
    К сожалению, я ошибся между идентификатором типа и адресом id, поэтому мои расчеты были неправильными. – Code Prank 24 December 2013 в 10:11
  • 5
    Первый, вероятно, лучше всего подходит для этого конкретного случая. Я показал вторую, потому что эта идиома может быть полезна в более сложных случаях. – Barmar 24 December 2013 в 10:13

попробуйте это

SELECT types.type_name, stats.posts, stats.likes, stats.comments
FROM types
LEFT JOIN (
select post_type, count(i.post_id) as posts, sum(i.likes) as likes, sum(i.comments) as comments
from insights i INNER JOIN posts p ON i.post_id = p.post_id
) as stats
ON types.type_id = stats.post_type;
-1
ответ дан bavo 21 August 2018 в 07:06
поделиться
  • 1
    Я думаю, что вам не хватает GROUP BY post_type в подзапросе. – Mihai 24 December 2013 в 10:06
  • 2
    Вы пробовали этот запрос? не работает вообще – Code Prank 24 December 2013 в 10:06
  • 3
    Я попытался, и действительно, он пропустил группу в подзапросе. SELECT types.type_name, stats.posts, stats.likes, stats.comments FROM types LEFT JOIN ( select post_type, count(i.post_id) as posts, sum(i.likes) as likes, sum(i.comments) as comments from insights i INNER JOIN posts p ON i.post_id = p.post_id group by post_type) as stats ON types.type_id = stats.post_type; – bavo 26 December 2013 в 14:23
Другие вопросы по тегам:

Похожие вопросы: