std::seed_seq
- это что-то из C ++ 11, поэтому я считаю, что вы можете использовать синтаксис фигурной скобки при объявлении переменных:
typedef std::default_random_engine rand_engine;
rand_engine createRandEngine(const int &seed)
{
std::seed_seq _s {unsigned(seed)};
rand_engine _eng {_s};
return _eng; // Check if we can find alternative ways to render _eng
}
Это, как я проверял, не вызовет предупреждения или ошибки (и сделайте ваше намерение передать параметр конструкторам более явным).
Теперь посмотрим, почему вы потерпели неудачу. Вы пытаетесь инициализировать _s
как тип std::__1::seed_seq(unsigned int)
(согласно моему компилятору clang), но вы намеревались передать одноэлементный список в std::seed_seq
. Таким образом, выражение скобки делает вас более явным, что вы хотите это в виде списка, хотя есть только один элемент. Однако пара круглых скобок делает запись немного двусмысленной, и мой лязг ошибочно принимает ваше намерение.
См. Примеры на https://en.cppreference.com/w/cpp/numeric/random/seed_seq/seed_seq , рекомендуется использовать фигурные скобки для инициализации.
PARTITION BY
пункт устанавливает диапазон записей, которые будут использоваться для каждой "ГРУППЫ" в OVER
пункт.
В Вашем примере SQL, DEPT_COUNT
возвратит численность персонала в том отделе по каждой записи сотрудника. (Это - как будто Вы - de-nomalising emp
таблица; Вы все еще возвращаете каждую запись в emp
таблица.)
emp_no dept_no DEPT_COUNT
1 10 3
2 10 3
3 10 3 <- three because there are three "dept_no = 10" records
4 20 2
5 20 2 <- two because there are two "dept_no = 20" records
, Если был другой столбец (например, state
) затем, Вы могли бы рассчитать сколько отделов в том состоянии.
Это похоже на получение результатов GROUP BY
(SUM
, AVG
, и т.д.) без агрегации набора результатов (т.е. удаление соответствия записям).
полезно, когда Вы используете LAST OVER
или MIN OVER
функции для получения, например, самой низкой и самой высокой зарплаты в отделе, и затем использовать это в вычислении против этого записывает зарплату без [1 113] выбор sub, который намного быстрее.
Read связанный статья AskTom для получения дальнейшей информации.
Это - расширение SQL, названное аналитикой. В избранном операторе говорит оракулу, что функция является аналитической функцией, не группой функцией. Преимущество для использования аналитики состоит в том, что можно собрать суммы, количества, и намного больше со всего одной передачей через данных вместо цикличного выполнения через данные с sub выбирает или хуже, МН / SQL.
Это действительно выглядит сбивающим с толку сначала, но это будет второй натурой быстро. Никто не объясняет это лучше тогда Tom Kyte. Таким образом, ссылка выше является большой.
, Конечно, читая документация является необходимостью.
Я думаю, этот пример предлагает маленький нюанс о том, как разделение работает и как группа работами. Мой пример от Oracle 12, если мой пример, оказывается, ошибка компиляции.
я попробовал:
SELECT t.data_key
, SUM ( CASE when t.state = 'A' THEN 1 ELSE 0 END)
OVER (PARTITION BY t.data_key) count_a_rows
, SUM ( CASE when t.state = 'B' THEN 1 ELSE 0 END)
OVER (PARTITION BY t.data_key) count_b_rows
, SUM ( CASE when t.state = 'C' THEN 1 ELSE 0 END)
OVER (PARTITION BY t.data_key) count_c_rows
, COUNT (1) total_rows
from mytable t
group by t.data_key ---- This does not compile as the compiler feels that t.state isn't in the group by and doesn't recognize the aggregation I'm looking for
Это однако работает как ожидалось:
SELECT distinct t.data_key
, SUM ( CASE when t.state = 'A' THEN 1 ELSE 0 END)
OVER (PARTITION BY t.data_key) count_a_rows
, SUM ( CASE when t.state = 'B' THEN 1 ELSE 0 END)
OVER (PARTITION BY t.data_key) count_b_rows
, SUM ( CASE when t.state = 'C' THEN 1 ELSE 0 END)
OVER (PARTITION BY t.data_key) count_c_rows
, COUNT (1) total_rows
from mytable t;
Создание числа элементов в каждом состоянии на основе внешнего ключа "data_key". Так, если бы, data_key = 'APPLE' имела 3 строки с состоянием, 2 строки с 'B' состояния, строку с 'C' состояния, то соответствующей строкой для 'APPLE' была бы 'APPLE', 3, 2, 1, 6.
EMPNO DEPTNO DEPT_COUNT
7839 10 4
5555 10 4
7934 10 4
7782 10 4 --- 4 records in table for dept 10
7902 20 4
7566 20 4
7876 20 4
7369 20 4 --- 4 records in table for dept 20
7900 30 6
7844 30 6
7654 30 6
7521 30 6
7499 30 6
7698 30 6 --- 6 records in table for dept 30
Здесь мы получаем счет для соответствующего отдела. Что касается deptno 10, у нас есть 4 записи в таблице emp, аналогичные результаты для deptno 20 и 30.