не группа оракула [дубликат]

Странно, что вы «не можете» разрешать TLD с 4 символами. Вы запрещаете людей из .info и .name , а ограничение длины останавливается .travel и .museum , но да, они менее распространены, чем 2-х символов TLD и 3-символьные TLD.

Вы также должны использовать прописные буквы. Системы электронной почты нормализуют локальную часть и часть домена.

Для вашего регулярного выражения части домена имя домена не может начинаться с '-' и не может заканчиваться на '-'. Dash может находиться только между ними.

Если вы использовали библиотеку PEAR, проверьте их функцию почты (забыли точное имя / библиотеку). Вы можете проверить адрес электронной почты, вызвав одну функцию, и проверяет адрес электронной почты в соответствии с определением в RFC822.

107
задан Ben 25 May 2014 в 20:59
поделиться

7 ответов

Вы должны поместить все столбцы SELECT в GROUP BY или использовать на них функции, которые сжимают результаты до одного значения (например, MIN, MAX или SUM).

Простой пример, чтобы понять, почему это происходит: представьте, что у вас есть такая база данных:

FOO BAR
0   A
0   B

и вы запускаете SELECT * FROM table GROUP BY foo. Это означает, что база данных должна возвращать одну строку в качестве результата с первым столбцом 0, чтобы выполнить GROUP BY, но теперь есть два значения bar. Какой результат вы ожидаете - A или B? Или должна ли база данных возвращать более одной строки, нарушая контракт GROUP BY?

185
ответ дан Aaron Digulla 24 August 2018 в 08:43
поделиться

Группа by используется для агрегирования некоторых данных, в зависимости от агрегатной функции, и кроме этого вам нужно поместить столбец или столбцы, для которых вам нужна группировка.

например:

select d.deptno, max(e.sal) 
from emp e, dept d
where e.deptno = d.deptno
group by d.deptno;

Это приведет к максимальной заработной плате отделов.

Теперь, если мы опустим d.deptno из предложения group by, она даст ту же ошибку.

1
ответ дан chŝdk 24 August 2018 в 08:43
поделиться

Если вы выполняете поиск в силу предложения GROUP BY, любое выражение в SELECT, которое не является групповой функцией (или агрегатной функцией или агрегированной колонкой), например COUNT, AVG, MIN, MAX, SUM и т. д. ( Список функций агрегации ) должен присутствовать в GROUP BY.

Пример (правильный путь) (здесь employee_id негрупповая функция (неагрегированный столбец), поэтому в GROUP BY появляется . Напротив, сумма (зарплата) представляет собой групповую функцию (агрегированный столбец), поэтому не требуется появляться в GROUP BY.

   SELECT employee_id, sum(salary) 
   FROM employees
   GROUP BY employee_id; 

Пример (неправильный путь) (здесь employee_id не является групповой функцией и не появляется в предложении GROUP BY, что приведет к ошибке ORA-00979 .

   SELECT employee_id, sum(salary) 
   FROM employees;

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

  • Включить все неагрегированные выражения, перечисленные в SELECT в разделе GROUP BY
  • Удалить функцию группы (агрегат) из SELECT.
1
ответ дан fg78nc 24 August 2018 в 08:43
поделиться

Вы должны сделать следующее:

SELECT cr.review_sk, 
       cr.cs_sk, 
       cr.full_name,
       tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt",
       cs.cs_id, 
       cr.tracking_number
from review cr, cs, fact cf
where cr.cs_sk = cs.cs_sk
       and UPPER(cs.cs_id) like '%' || UPPER(i_cs_id) || '%'
       and row_delete_date_time is null
       and cr.review_sk = cf.review_wk (+)
       and cr.fact_type_code (+) = 183050
GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number, cs.cs_id, cr.full_name
ORDER BY cs.cs_id, cr.full_name;
2
ответ дан Pavel Zimogorov 24 August 2018 в 08:43
поделиться

Слишком плохо Oracle имеет такие ограничения. Конечно, результат для столбца, не входящего в GROUP BY, будет случайным, но иногда вы этого хотите. Глубокий Oracle, вы можете сделать это в MySQL / MSSQL.

НО есть работа для Oracle:

Пока следующая строка не работает

SELECT unique_id_col, COUNT(1) AS cnt FROM yourTable GROUP BY col_A;

Вы можете обмануть Oracle с некоторыми 0, как показано ниже, чтобы сохранить свой столбец в области видимости, но не группировать его (предполагая, что это числа, в противном случае использовать CONCAT)

SELECT MAX(unique_id_col) AS unique_id_col, COUNT(1) AS cnt 
FROM yourTable GROUP BY col_A, (unique_id_col*0 + col_A);
4
ответ дан Peter O. 24 August 2018 в 08:43
поделиться

Включить в GROUP BY предложение все SELECT выражения, которые не являются аргументами групповой функции.

14
ответ дан Ram Sharma 24 August 2018 в 08:43
поделиться

Такая же ошибка также возникает, когда ключевое слово UPPER или LOWER не используется в обоих случаях в выражении select и group по выражению.

Неверно: -

select a , count(*) from my_table group by UPPER(a) .

Вправо: -

select UPPER(a) , count(*) from my_table group by UPPER(a) .
0
ответ дан Vijay Gupta 24 August 2018 в 08:43
поделиться
Другие вопросы по тегам:

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