SELECT DAYOFYEAR(O.`date`) AS d, COUNT(*), (select count(*) from `orders` where DAYOFYEAR(`date`) <= d and `hasPaid` > 0) FROM `orders` as O WHERE O.`hasPaid` > 0 GROUP BY d ORDER BY d
Это потребует некоторой синтаксической настройки (у меня нет MySQL для ее проверки), но она показывает вам эту идею. Подзапрос просто должен вернуться и добавить все свежее, что вы уже включили во внешний запрос, и это нужно сделать для каждой строки.
Посмотрите на этот вопрос , как использовать соединения для достижения того же.
Чтобы решить проблемы ухудшения производительности с ростом данных: поскольку существуют Максимум. 366 дней в году, и я предполагаю, что вы не выполняете этот запрос в течение нескольких лет, подзапрос будет оцениваться до 366 раз. С правильными индексами в дате и флагом hasPaid вы будете в порядке.
В этом случае вы должны полностью указать имя участника.
class A
{
public:
int x;
};
class B : public A
{
public:
int x;
B()
{
x = 0;
A::x = 1;
}
};
Один из подходов (уже упомянутых во всех других ответах) - использовать квалифицированное имя члена, например Base :: member
. Его можно использовать вместе с явным доступом через указатель this
, если это ваш стиль: this-> Base :: member
.
Другой подход - выполнить доступ через этот
указатель, явно преобразованный в тип базового класса: ((Base *) this) -> member
.
Конечно, приведенные выше ссылки на этот
указатель сделаны в предположении, что вы пытаетесь получить доступ к члену из некой нестатической функции-члена класса. Чтобы получить доступ «извне», те же уловки можно применить к любому другому указателю (или ссылке): some_pointer-> Base :: member
или ((Base *) some_pointer) -> member
.
Для членов данных эти два подхода эквивалентны. Для функций-членов они могут приводить к разным результатам с виртуальными функциями. По этой причине, как правило, следует предпочесть первый подход.
Чтобы получить доступ к скрытому члену в базовом классе, вы должны поставить перед именем члена имя базового класса. См. Ниже:
class A
{
protected:
int i;
};
class B : public A
{
public:
void foo( void )
{
int a_i = A::i;
int b_i = i;
int b_i_as_well = B::i;
}
private:
int i;
};
Да.
Уточните свой вызов, f ()
, с именем класса: SpecificClass :: f ()
.
Если вы укажете имя, то автоматически получите доступ к тому, что находится в наследуемом классе. Если вы имеете в виду, как получить доступ к тому, который находится в базовом классе, используйте Base::member