GROUP BY T-SQL: Лучший способ включать другие сгруппированные столбцы

Полное исправление благодаря руководству @ AlexG

void Start () {
    gameOver = false;
    StartCoroutine (SpawnWaves());
}

IEnumerator SpawnWaves()
{
    yield return new WaitForSeconds(startWait);
    while (gameOver != true)
    {
        for (int i = 0; i < hazardCount; i++)
        {
            if(gameOver)break;
            GameObject enemy = enemies[Random.Range(0, enemies.Length)];
            Instantiate(enemy, spawnPosition1, spawnRotation1);
            Instantiate(enemy, spawnPosition2, spawnRotation2);
            Instantiate(enemy, spawnPosition3, spawnRotation3);
            Instantiate(enemy, spawnPosition4, spawnRotation4);
            Instantiate(enemy, spawnPosition5, spawnRotation5);
            Instantiate(enemy, spawnPosition6, spawnRotation6);
            yield return new WaitForSeconds(spawnWait);
        }
        yield return new WaitForSeconds(waveWait);
        enemies[0].GetComponent<EnemyBehviour>().currentHealth *= eenter code herenemyHealthMultiplier;
    }
}
13
задан DanM 9 March 2009 в 15:46
поделиться

5 ответов

Можно заставить это работать с чем-то вокруг этих строк:

select e.empID, fname, lname, title, dept, projectIDCount
from
(
   select empID, count(projectID) as projectIDCount
   from employees E left join projects P on E.empID = P.projLeader
   group by empID
) idList
inner join employees e on idList.empID = e.empID

Таким образом, Вы избегаете дополнительной группы операциями, и можно получить любые данные, которые Вы хотите. Также у Вас есть лучший шанс хорошо использовать индексы на некоторых сценариях (если Вы не возвращаете полную информацию), и может быть лучше объединен с подкачкой страниц.

16
ответ дан 1 December 2019 в 22:08
поделиться

"это стало бы ДЕЙСТВИТЕЛЬНО ужасным, чтобы попытаться включать всех их в группу пунктом".

Да - это - единственный способ сделать это * - просто копируют и вставляют неагрегированные столбцы в группу пунктом, удаляют псевдонимы, и это так хорошо, как это добирается...

*Вы могли перенести его во вложенный ВЫБОР, но это, вероятно, так же ужасно...

4
ответ дан 1 December 2019 в 22:08
поделиться

MySQL необычен - и технически не совместим со стандартом SQL - в разрешении Вам опустить объекты из пункта GROUP BY. В стандартном SQL каждый несовокупный столбец в списке выборки должен быть перечислен полностью в пункте GROUP BY (или по имени или порядковым числом, но это удерживается от использования).

(О, хотя MySQL необычен, хорошо, что это позволяет стенографию.)

2
ответ дан 1 December 2019 в 22:08
поделиться

Вам не нужно присоединяться к подзапросу, так как нет необходимости создавать группу на основе empID от сотрудников - вы можете сделать это в поле projectLeader из проектов.

С помощью внутреннего соединения (как я уже сказал) вы получите список сотрудников, у которых есть хотя бы один проект. Если вам нужен список всех сотрудников, просто измените его на left join

  select e.empID, e.fname, e.lname, e.title, e.dept, p.projectIDCount
    from employees e 
   inner join ( select projLeader, count(*) as projectIDCount
                  from projects
                 group by projLeader
              ) p on p.projLeader = e.empID
1
ответ дан 1 December 2019 в 22:08
поделиться

Подзапрос в предложении select также может быть подходящим. Это будет работать для приведенного примера, но может не работать для реального сложного запроса, с которым вы имеете дело.

select
        e.empID, fname, lname, title, dept
        , (select count(*) from projects p where p.projLeader = e.empId) as projectCount
from
   from employees E
0
ответ дан 1 December 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: