врезался в стену при подсчете И процентах от общего количества в одном запросе
Я хочу ОБЩИЕ единицы в каждой локации И ПРОЦЕНТ ВСЕГО ПО ВСЕМ МЕСТАМ ...
то, что у меня есть - возвращает 0 (ноль) в процентах - я считаю, что мне нужно преобразовать цифру в десятичный или вещественный тип - но что бы я ни пытался (приведение каждого элемента или приведение целого результата - я получить ошибки ...)
SELECT
count(I.ID) as count
,L.ID
,(
count(I.ID)
/
( SELECT count(I2.ID)
FROM LOCATION L2
JOIN ITEM I2 ON I2.LocID = L2.ID
WHERE L2.ID IN (36,38,39,40) )
) AS percent
FROM LOCATION L
JOIN ITEM I ON I.LocID = L.ID
WHERE L.ID IN (36,38,39,40)
GROUP BY L.ID
Есть мысли о том, как вернуть десятичное число ???
или просто сделать его более элегантным .. точка?
Что бы я "ожидал"
ID COUNT PERCENT
2436 362 30.47
2438 184 15.48
2439 173 14.56
2440 172 14.47
2441 151 12.71
2442 54 4.54
2702 92 7.74
========
«т» предложил это -
считать (I.ID) * 100,0 / считать (*) сверх () AS процентов
Что должен делать "over ()" ??
вот возвращение:
ID COUNT PERCENT
2436 362 51
2438 184 26
2439 173 24
2440 172 24
2441 151 21
2442 54 7
2702 92 13
========== РЕШЕНИЕ
SELECT
count(I.ID) as count
,L.ID
,(
1.0 * count(I.ID) / (
SELECT count(I2.ID)
FROM LOCATION L2
JOIN ITEM I2 ON I2.LocID = L2.ID
WHERE L2.ID = L1.ID )
) * 100 AS percent
FROM LOCATION L
JOIN ITEM I ON I.LocID = L.ID
WHERE L.ID IN (36,38,39,40)
GROUP BY L.ID