2015-06-30 3 views
1

новичок вопрос. У меня есть эта таблица А:Можно ли использовать (разбитый?) GROUP BY для расчета процентов?

theDate  | concept | datum 
DATE  | VARCHAR | FLOAT 
---------------------------------- 
2000-01-01 | Concept A | 19 
2000-01-01 | Concept B | 10 
2000-01-01 | Concept C | 0 
2001-01-01 | Concept A | 30 
2001-01-01 | Concept B | 15 
2001-01-01 | Concept C | 0 

Мне нужно вычислить процент:

theDate  | concept | percentage 
DATE  | VARCHAR | FLOAT 
---------------------------------- 
2000-01-01 | Concept A | 65.51724138 
2000-01-01 | Concept B | 34.48275862 
2000-01-01 | Concept C | 0 
2001-01-01 | Concept A | 66.66666667 
2001-01-01 | Concept B | 33.33333333 
2001-01-01 | Concept C | 0 

Безопасно ли использовать один GROUP BY, без подзапроса или автообъединение? Как это:

SELECT theDate, concept, datum * 100/sum(datum) percentage 
FROM A 
GROUP BY theDate 

Примечание: Я рассмотрел этот вопрос Calculate percentage in SQL, но я чувствую, что это не отвечает на мои.

+2

Я полагаю, вы используете MySQL? Большинство других СУБД сообщали бы об ошибке здесь и требовали, чтобы вы включили 'concept, (datum * 100)' в 'GROUP BY' тоже. –

+0

@MichaelBerkowski Не моя СУБД. Это дает правильный результат в этом примере игрушек, но я боюсь использовать его для производства с помощью Real Data :-) –

+1

Работая только с одной таблицей и не присоединяясь, _and_ неизменяемые значения 'concept', это будет нормально без полного 'GROUP BY'. Но если значение 'concept' изменяется в группе' theDate', RDBMS может сообщать о непоследовательных и неопределенных результатах для этого столбца. Пожалуйста, пометьте вопрос с помощью соответствующих RDBMS –

ответ

1

правильный способ это .. но в MySQL это обыкновение давать какие-либо ошибки ...

SELECT theDate, concept, datum * 100/sum(datum) percentage 
FROM A 
GROUP BY (theDate,concept) 
+0

процент будет бессмысленным, если мы будем группироваться по дате и концепции. – Tim3880

+0

@ Tim3880 С заданными образцами строк да, но не если 'concept' не является уникальным для' theDate'. –

+0

@ ravi-teja-kaveti Tnx. –

Смежные вопросы