MySQL crosstab query

4 отговора 1181 прегледа
#1

MySQL crosstab query

Здравейте.

Имате ли идея как се прави crosstab заяка в MySQL (4.1)? Имам следната заявка, реализирана в Access:

TRANSFORM Count(feedbacks.msgType) AS CountOfmsgType
SELECT dirs.dirName
FROM dirs INNER JOIN (msgtypes INNER JOIN feedbacks ON msgtypes.Id=feedbacks.msgType) ON dirs.Id=feedbacks.dirID
GROUP BY dirs.Id, dirs.dirName
PIVOT msgtypes.msgType;

Изходната раблица е dirName редове и колони от msgType count-овете за всеки dirName.

Danke предварително.

Отговор
в отговор на mr.vain #2

Re: MySQL crosstab query

Оправих се:

SELECT
d.dirName AS dirName,
SUM(IF(f.msgType = 1,1,0)) AS Type0,
SUM(IF(f.msgType = 2,1,0)) AS Type1
...
FROM dirs AS d
LEFT JOIN feedbacks AS f ON d.ID = f.dirID
GROUP BY d.ID
ORDER BY d.dirName

Но ако някой има по-добра идея нека сподели, защото SUM IF е доста статичен подход според мен (макар и да върши работа).

Отговор
в отговор на mr.vain #3

Re: Ето ти една стара и много ценна статия

[линк]

salle.online.bg/sig
Отговор
в отговор на salle #4

Re: Ето ти една стара и много ценна статия

Ами подхода е абсолютно същия, няма никаква разлика - използва се SUM IF. Проблема е, че в стейтмънта трябва да се изброят желаните колоните, и при промяна в структурата на таблицата ще е необходимо да се промени и заявката.

Чудех се дали има по гъвкав метод за генериране на pivot table в MySQL?

Отговор
в отговор на mr.vain #5

Re: Ето ти една стара и много ценна статия

s/MySQL/SQL/g ?
т.е. има ли такова животно в SQL стандарта?

Определено няма да намериш такова животно.

Въпросният тип статистическа обработка е пряко свързан с конкретните стойности в дадена колонка. Не само със структурата на таблицата но и със съдържанието.

salle.online.bg/sig
Отговор