Oracle “раздел” ключевым словом

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 , рекомендуется использовать фигурные скобки для инициализации.

242
задан a_horse_with_no_name 27 October 2016 в 19:55
поделиться

4 ответа

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 для получения дальнейшей информации.

248
ответ дан Guy 23 November 2019 в 03:12
поделиться

Это - расширение SQL, названное аналитикой. В избранном операторе говорит оракулу, что функция является аналитической функцией, не группой функцией. Преимущество для использования аналитики состоит в том, что можно собрать суммы, количества, и намного больше со всего одной передачей через данных вместо цикличного выполнения через данные с sub выбирает или хуже, МН / SQL.

Это действительно выглядит сбивающим с толку сначала, но это будет второй натурой быстро. Никто не объясняет это лучше тогда Tom Kyte. Таким образом, ссылка выше является большой.

, Конечно, читая документация является необходимостью.

27
ответ дан user60890 23 November 2019 в 03:12
поделиться

Я думаю, этот пример предлагает маленький нюанс о том, как разделение работает и как группа работами. Мой пример от 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.

0
ответ дан 23 November 2019 в 03:12
поделиться
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.

10
ответ дан 23 November 2019 в 03:12
поделиться
Другие вопросы по тегам:

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