|
Тема
|
Group functions in MySQL
|
|
Автор |
toranaga ("razbirach") |
Публикувано | 07.03.03 11:33 |
|
DB: MySQL
Version: 3.23.49a
Имам следната заявка
SELECT p.PACKAGE_ID,ps.SET_ID,count(t.THUMB_SAMPLE_ID)
FROM PACKAGES p,PACKAGE_SETS ps,THUMB_SAMPLES t
WHERE p.PACKAGE_SETS_ID = ps.PACKAGE_SETS_ID and ps.SET_ID = t.SET_ID and p.PACKAGE_ID = '4' GROUP BY ps.SET_ID
Работи си ОК, получавам следното:
PACKAGE_ID SET_ID count(t.THUMB_SAMPLE_ID)
4 25 71
4 29 75
4 39 68
Въпроса ми е има ли начин да получа сумата в колоната count(t.THUMB_SAMPLE_ID), т.е. нещо от рода на sum(count(t.THUMB_SAMPLE_ID))?
| |
Тема
|
Re: Group functions in MySQL
[re: toranaga]
|
|
Автор | Baj L\bo (Нерегистриран) |
Публикувано | 07.03.03 21:26 |
|
ако не групираш по нищо ще получиш каунт за целия резултат, който ще е равен на сумата от каунтите, които получаваш сега.
Позволявам си да отбележа че в селект листа имаш p.PACKAGE_ID,ps.SET_ID, докато в груп бай имаш само ps.SET_ID, което не е стандартен SQL. Виждам че ти работи, но в друга субд или няма да работи, или резултата ще е различен.
| |
Тема
|
Re: Group functions in MySQL
[re: Baj L\bo]
|
|
Автор |
toranaga ("razbirach") |
Публикувано | 08.03.03 11:23 |
|
Hi,
Мерси за отговора - оказа се че трябва да групирам по p.PACKAGE_ID, за да получа каквото искам. Ако не групирам по нищо, ми дава грешка че не може да използва group функция без group by, a ако групирам по двете (независимо в какъв ред), получавам същото като при group by s.SET_ID).
Да, чувал съм за разлики при ползване на group by при други СУБД, но засега не съм се сблъсквал с тях. Как трябва да е според стандартния SQL?
Още веднъж, благодаря ти.
| |
Тема
|
Re: Group functions in MySQL
[re: toranaga]
|
|
Автор |
salle (минаващ) |
Публикувано | 08.03.03 17:38 |
|
Според стандарта можеш да групираш по дадена колона или alias само ако се появяван в частта SELECT
SELECT name, SUM(points) GROUP BY name;
В MySQL е допустимо да направиш:
SELECT SUM(points) GROUP BY name;
Както и друг път съм казвал интерпретацията на резултатите е доста сложничка.
Я обясни Торанага Сан какво се опитваш да постигнеш?
Групирането по повече от една колона е съвсем друго нещо и си има доста нормална логика.
SELECT seller, product, sum(sell_price) FROM sells GROUP by seller, product;
Ако ти трябват междунни суми - можеш да опиташ WITH CUBE и WITH ROLLUP, но ще получиш съобщенийце, че още не се поддържат от тази версия на MySQL - трябваше да се появят в 4.1 ама засега има малко проблеми.
| |
Тема
|
Re: Group functions in MySQL
[re: salle]
|
|
Автор |
toranaga ("razbirach") |
Публикувано | 09.03.03 00:15 |
|
Имам следното:
Имам SETS, които грубо казано се състоят от картинки (THUMB_SAMPLES)
връзката тук е 1:n, в THUMB_SAMPLES си имам колона SEТ_ID за нея
После имам пакети (PACKAGES), които се състоят от сетове. Връзката между тях е много към много и се пази в таблицата PACKAGE_SETS
Та аз се правя нещо доста тривиално - искам да преброя колко картинки имам в един пакет, който се състои от 3 сета примерно...
Не знам защо, нещо не го подкарах от първия отначало, най-доброто което постигнах е че получих бройката сет по сет и после ги събрах
Е, днес го подкарах вече....
Колкото до групирането по повече от една колона, просто експериментирах и споделих резултата, защото ми се стори странно че при различен ред на колоните в group by, резултата си беше един и същ.
Та това е... нищо особено.
| |
|
|
|
|