Loading...
lapd87 avatar lapd87 103 Точки

[Homework] Joins, Subqueries and Indices - 15. Problem - Continents and Currencies

някой може ли да помогне да го реша по начин без втори селект?

Опитвам нещо такова https://www.xaprb.com/blog/2007/03/14/how-to-find-the-max-row-per-group-in-sql-without-subqueries/

но нещо не успявам със синтаксиса

SELECT 
    `c`.`continent_code`,
    `c`.`currency_code`,
    COUNT(`c`.`currency_code`) AS `currency_usage`
FROM
    `countries` AS `c`
        LEFT JOIN
    `countries` AS `cc` ON `c`.`country_code` = `cc`.`country_code`
        AND COUNT(`cc`.`currency_code`) < COUNT(`c`.`currency_code`)
WHERE
    COUNT(`c`.`currency_code`) > 1
GROUP BY `c`.`currency_code` , `cc`.`country_code`
ORDER BY `continent_code` , `currency_code`;

 

 

0
Databases Basics - MySQL
k.sevov avatar k.sevov 1077 Точки

Ето така може да стане с тази идея, но нямам време в момента да обясня какво се случва и защо не става с твоя запис (ще едитна довечера).

Edit: Идеята е, че начинът, който е описан в статията, може да се използва върху вече подготвена таблица - в нашия случай да си имаме като записи двойки континент-валута и бройката на държавите за всяка от тях (в примера в статията съответно двойки пол-име и възраст за всеки запис). След това вече слагаме Join на таблицата с нейно копие, за да си получим желания резултат. За да си подготвим таблицата в този формат групираме по континент и валута, което ни дава каквото трябва (бройката на държавите, които едновременно сe намират в континент Х и използват валута У, и така за всяка комбинация континент-валута). 

При твоя код първият проблем е, че join-ваш оригиналната таблица, която не е в необходимия формат. Освен това нито един от трите COUNT-а не е на възможно за него място. Например не можеш да имаш такъв в where клаузата, тъй като WHERE филтрира данните от оригиналната таблица, а Count колоната ще е налична само в резултата (затова и филтрирането с агрегиращи функции го правим с HAVING, който филтрира данните от таблицата-резултат). По същата причина не можем да го използваме и като условие на Join-a - резултатите все още не съществуват и няма как да ги използваме преди да са пресметнати (а тяхното пресмятане ще зависи от това какви условия сме сложили в Join-a в случая). 

4
17/02/2018 00:17:59
lapd87 avatar lapd87 103 Точки

Благодаря ти за отделеното време и подробните обяснения!

За съжаление решението което предложи не ми харесва, защото отново имам повторения :) но благодарение на обясненията ти сътворих това https://pastebin.com/Bg53ipgp

смятам че така най-чисто се решава задачата без повторения и без функциите които сега вече учихме :)

1
AtillaOmer avatar AtillaOmer 13 Точки

Здравейте, не разбрах смисъла зад join-а на d1 и d2. Защо се прави това?

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.