Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как сделать COUNT для SQL с DISTINCT?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Добрый день.
Запрос:

SELECT  
DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone 
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
WHERE p.id_firm=f.id_firm



Подскажите возможно ли использовать в данном примере COUNT() и как правильно написать?
15 янв 13, 13:25    [13771785]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
qwerty112
Guest
Amateur7
SELECT  
DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone 
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
WHERE p.id_firm=f.id_firm


какая прелесть ! )

---
SELECT  
f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone ,
count(*) as xz
FROM Firm f 
where exists (select 1 from Price p WHERE p.id_firm=f.id_firm)
15 янв 13, 13:34    [13771869]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Amateur7
left join Price p on p.id_firm = f.id_firm
WHERE p.id_firm=f.id_firm

Для чего условие продублировано?

SELECT  
f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone,
COUNT(p.id_firm) as "Кол-во прайсов"
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
GROUP BY f.name,
f.address,
f.business,
f.web,
f.phone
15 янв 13, 13:36    [13771895]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Amateur7
Подскажите возможно ли использовать в данном примере COUNT()

COUNT() чего вам нужен ?
15 янв 13, 13:48    [13771992]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
qwerty112
Amateur7
SELECT  
DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone 
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
WHERE p.id_firm=f.id_firm


какая прелесть ! )

---
SELECT  
f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone ,
count(*) as xz
FROM Firm f 
where exists (select 1 from Price p WHERE p.id_firm=f.id_firm)
Этот запрос - тоже чудо как хорош!
Я б на месте сервера написал бы в ответ про некий GROUP BY
15 янв 13, 14:14    [13772214]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
Я б на месте сервера написал бы в ответ про некий GROUP BY

Этому запросу и GROUP BY не поможет ;-)
15 янв 13, 14:18    [13772260]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
qwerty112
Guest
iap
qwerty112
пропущено...

какая прелесть ! )

---
SELECT  
f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone ,
count(*) as xz
FROM Firm f 
where exists (select 1 from Price p WHERE p.id_firm=f.id_firm)
Этот запрос - тоже чудо как хорош!
Я б на месте сервера написал бы в ответ про некий GROUP BY

даа, GROUP BY - не помешает :)

что-то я перестал понимать, что ТС "считает" ...
15 янв 13, 14:54    [13772503]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
qwerty112
Guest
Гость333
Amateur7
left join Price p on p.id_firm = f.id_firm
WHERE p.id_firm=f.id_firm

Для чего условие продублировано?

SELECT  
f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone,
COUNT(p.id_firm) as "Кол-во прайсов"
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
GROUP BY f.name,
f.address,
f.business,
f.web,
f.phone

это НЕ "дублирование", а замена LEFT JOIN-а INNER-ом,
со всеми "вытекающими", для предложенного вами запроса
15 янв 13, 15:01    [13772560]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
qwerty112
замена LEFT JOIN-а INNER-ом

Спасибо, я в курсе :-)

qwerty112
со всеми "вытекающими", для предложенного вами запроса

Тут я не очень понял, что откуда вытекает. Если у фирмы нет прайсов — выведем ноль. Это я так потёр хрустальный шар и прочёл условия задачи :-)
15 янв 13, 15:09    [13772636]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
qwerty112
Guest
Гость333
...
Тут я не очень понял, что откуда вытекает. Если у фирмы нет прайсов — выведем ноль.

а исходный запрос - просто такие строки не выводит
Гость333
Это я так потёр хрустальный шар и прочёл условия задачи :-)

тут, в парал.топике, ТС постраничный вывод "мучает",
так вот, "к гадалке не ходи" - этот его "COUNT для SQL с DISTINCT" - это он так к-во записей которые вернул запрос называет (@@rowcount)
имхо, конешна :)
15 янв 13, 15:16    [13772723]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
qwerty112
этот его "COUNT для SQL с DISTINCT" - это он так к-во записей которые вернул запрос называет (@@rowcount)

Хех, тоже вариант!
15 янв 13, 15:25    [13772782]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Гость333
qwerty112
этот его "COUNT для SQL с DISTINCT" - это он так к-во записей которые вернул запрос называет (@@rowcount)

Хех, тоже вариант!
Тогда получается, весь запрос - в производную таблицу, а COUNT(*) - снаружи
15 янв 13, 15:37    [13772906]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
qwerty112
Amateur7
SELECT  
DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone 
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
WHERE p.id_firm=f.id_firm


какая прелесть ! )

---
SELECT  
f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone ,
count(*) as xz
FROM Firm f 
where exists (select 1 from Price p WHERE p.id_firm=f.id_firm)


да, не тот участок кода скопировал после where)
15 янв 13, 16:30    [13773339]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Glory
Amateur7
Подскажите возможно ли использовать в данном примере COUNT()

COUNT() чего вам нужен ?



DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone
15 янв 13, 16:31    [13773342]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
qwerty112
Гость333
...
Тут я не очень понял, что откуда вытекает. Если у фирмы нет прайсов — выведем ноль.

а исходный запрос - просто такие строки не выводит
Гость333
Это я так потёр хрустальный шар и прочёл условия задачи :-)

тут, в парал.топике, ТС постраничный вывод "мучает",
так вот, "к гадалке не ходи" - этот его "COUNT для SQL с DISTINCT" - это он так к-во записей которые вернул запрос называет (@@rowcount)
имхо, конешна :)


Ну да, имхо_ сечас код переписывал и подумал как приплести COUNT() к Distinct (без group by), но из ответов вижу, что только с группировкой можно... результат конечно тот же, но интересовало мнение народа)

спасибо всем)
15 янв 13, 16:36    [13773364]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Amateur7
Glory
пропущено...

COUNT() чего вам нужен ?

DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone


при соответствующей версии сервера (но уж лучше group by)
DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone,
count(*) over (partition by f.name, f.address, f.business, f.web, f.phone)
15 янв 13, 17:02    [13773567]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Amateur7
и подумал как приплести COUNT() к Distinct (без group by),

Любой произвольный COUNT() что ли ?
15 янв 13, 17:03    [13773579]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Glory
Amateur7
и подумал как приплести COUNT() к Distinct (без group by),

Любой произвольный COUNT() что ли ?


Coount уникальных значений(distinct)
15 янв 13, 17:21    [13773709]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Glory
Amateur7
и подумал как приплести COUNT() к Distinct (без group by),

Любой произвольный COUNT() что ли ?


MSSQL SERVER 2008
15 янв 13, 17:21    [13773714]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Amateur7
MSSQL SERVER 2008

Синия или зеленая коробочка ?
15 янв 13, 17:23    [13773736]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Glory
Amateur7
MSSQL SERVER 2008

Синия или зеленая коробочка ?

ну да, не того процетировал..

HandKot
Amateur7
пропущено...

DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone


при соответствующей версии сервера (но уж лучше group by)
DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone,
count(*) over (partition by f.name, f.address, f.business, f.web, f.phone)


MSSQL SERVER 2008
16 янв 13, 04:51    [13775743]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
неожиданный вопрос
Guest
Amateur7
Подскажите возможно ли использовать в данном примере COUNT() и как правильно написать?

что ты вообще посчитать пытаешься? код, мягко говоря, своеобразный. и считает нечто загадочное.
16 янв 13, 07:56    [13775837]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1965
Amateur7,

Автор, лучше напишите оригинальное задание задачи с sql-ex.ru
Явно оттуда таблицы.
17 янв 13, 11:27    [13783383]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Вопрос не с sql-ex.ru)

Первоначально был задействован запрос:

SELECT  
DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone 
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
WHERE p.id_city=f.id_city


Далее бралось num rows от запроса

В один из дней я подумал как сделать не num rows от запроса, а просчитать количество строк через count(), потому что так реально быстрее.

И вместо того чтобы сделать через GROUP BY, я стал думать как вывести count для всех полей строки, хотя оно и так будет одинаково.

Иными словами можно было написать так(на правильность не проверял):

SELECT COUNT(*)
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
WHERE p.id_city=f.id_city
Group by 
f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone 


а можно было и так:

SELECT COUNT(f.name)
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
WHERE p.id_city=f.id_city
Group by 
f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone 


а я все думал почему неправильно делать так:

SELECT COUNT(*)
DISTINCT f.name as f_name,
f.address as f_address,
f.business as f_business,
f.web as f_web,
f.phone as f_phone 
FROM Firm f 
left join Price p on p.id_firm = f.id_firm
WHERE p.id_city=f.id_city


P.S.: возможны ошибки при написании запросов, но смыл думаю передал.
В любом случае, спасибо всем за помощь)
18 янв 13, 13:11    [13790710]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать COUNT для SQL с DISTINCT?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Amateur7
Далее бралось num rows от запроса

В один из дней я подумал как сделать не num rows от запроса, а просчитать количество строк через count(), потому что так реально быстрее.

select @@rowcount
18 янв 13, 13:17    [13790776]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить