2015-07-23 3 views
0

У меня есть эта очень простая проблема, и я просто не могу понять, как это сделать. У меня две таблицы.SQL, создающий новую таблицу из существующих таблиц

Первый, users, содержит две колонки: id который является только номером, представляющим человека, и sex. Второй столбец сейчас не имеет значения.

Другой стол, orders имеет колонны: id_user, time, state. id_user относится к id в первой таблице. state имеет три разных значения (готово, отменено, новое). Мне нужно создать таблицу, в которой будет отображаться количество готовых состояний (сколько готовых состояний у одного человека) рядом с id этого человека. Я могу запустить эту вещь:

select * , count(state) as CountOfFinished from orders 
where state = 'finished' 
group by id_user; 

, чтобы показать мне эту информацию, но мне нужно, чтобы иметь таблицу, показывающую id, sex, CountOfFinished.

Я скопировал первую таблицу на новую, но не знаю, как добавить столбец CountOfFinished рядом с этими двумя. Я даже не знаю, как сделать столбец из него, чтобы я мог присоединиться к нему или что-то в этом роде.

Любая идея, что мне делать?

ответ

1

Вам не нужен новый стол. То, что вы хотите это JOIN, или в данном случае LEFT JOIN:

SELECT 
    u.id, 
    u.sex, 
    ISNULL(COUNT(o.state), 0) as CountOfFinished 
FROM users u 
LEFT JOIN orders o 
    ON o.id_user = u.id 
    AND o.state = 'finished' 
GROUP BY 
    u.id, u.sex 

Этот запрос будет список всех users и количество готовой orders. Если вы хотите перечислить только users с не менее чем одним завершенным order, используйте INNER JOIN.


Чтобы вставить в новую таблицу, создать таблицу первой и использовать INSERT INTO:

CREATE TABLE FinishedOrderCountByUser(
    UserId INT, 
    Sex  CHAR(1), 
    CountOfFinished INT 
) 
INSERT INTO FinishedOrderCountByUser(UserId, Sex, CountOfFinished) 
    SELECT 
     u.id, 
     u.sex, 
     ISNULL(COUNT(o.state), 0) as CountOfFinished 
    FROM users u 
    LEFT JOIN orders o 
     ON o.id_user = u.id 
     AND o.state = 'finished' 
    GROUP BY 
     u.id, u.sex 
+0

спасибо человеку! Он работает без ISNULL, с ним все значения равны 0 в столбце CountOfFinished, а 0 после COUNT (o.state) дает некоторую ошибку. Цененты, которых я сказал, «сделайте таблицу», поэтому я пытался ее создать. – Runciter

+0

Должно быть 'ИССЛЕДУЕТ (COUNT (o.state), 0)'. –

+0

Какая ошибка? –

 Смежные вопросы

  • Нет связанных вопросов^_^