Професионална програма
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