Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2012, 10:27   #1
Dexes
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 86
По умолчанию Связь один ко многим. Вывод количества "многих"

Всем привет.
Есть такая структура БД. Требуется вывести список пользователей и количество вопросов для пользователя. Пусть таблицы называются "names" и "questions".


SELECT *, count(q_id)
FROM names LEFT JOIN questions ON names.name_id = questions.name_id
GROUP BY q_id
Моя версия - естественно не спасло.

Последний раз редактировалось Dexes; 09.10.2012 в 10:32.
Dexes вне форума Ответить с цитированием
Старый 09.10.2012, 10:44   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT N.*, 
    SUM(CASE WHEN Q.name_id IS NULL THEN 0 ELSE 1 END) AS CountQuestions
  FROM names N
    LEFT JOIN questions Q ON Q.name_id=N.name_id 
  GROUP BY N.name_id
Код:
SELECT N.*, 
    (SELECT COUNT(*) FROM questions Q WHERE Q.name_id=N.name_id) AS CountQuestions
  FROM names N
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.10.2012, 10:38   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
SELECT *, count(q_id)
FROM names LEFT JOIN questions ON names.name_id = questions.name_id
GROUP BY q_id
Моя версия - естественно не спасло.
1. Не писать * , а честно перечислить (написать) поля которые вы хотите видеть
select name_id, name
2. Group by пишется с точностью до наоборот. Здесь перечисляются поля по которым идет слияние (поля на основе которых мы говорим что исходные строки равны) а не поля по которым считаем (count). фактически это будут все поля перечисленные в запросе для которых не указана групповая операция (count)

Код:
select name_id, name, count(q_id)
from....
group by name_id, name
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь "Один ко многим", как лучше реализовать? spamer SQL, базы данных 4 26.03.2012 01:12
Заполнение таблиц с со связью "Один ко многим" DenProx Microsoft Office Access 2 04.02.2011 10:24
Связь "один ко многим"? M17 SQL, базы данных 5 21.10.2009 15:07
связь один ко многим kate158 БД в Delphi 11 19.06.2009 09:13
настроить при открытии Excel 2003 в окошке "Тип файлов" вывод пункта "Все файлы (*.*)" по умолчанию? Unior Microsoft Office Excel 2 01.03.2009 02:42