COUNT (*) GROUP BY - PullRequest
       19

COUNT (*) GROUP BY

4 голосов
/ 09 января 2012

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

Это запрос:

SELECT DISTINCT ho.ID,ho.honame,ho.ho_status,SUM(Properties.Value) as [sales value], COUNT(Properties.record_id) as [property count]
FROM HeadOffice ho INNER JOIN Properties ON Properties.head_office_code = ho.id
WHERE Somecondition
GROUP BY ho.ID,ho.honame,ho_status ORDER BY ho_status

Несмотря на попытку COUNT(*), оборачивая его в другой запрос и удаляя GROUP BY,Я не могу вернуть «644».Самое близкое, что я получил, - это 644 строки, все из которых содержат «1».Возможно ли это?

Ответы [ 3 ]

5 голосов
/ 09 января 2012

Простой способ сделать это так:

SELECT count(1) as NumRows from
(SELECT DISTINCT ho.ID,ho.honame,ho.ho_status,SUM(Properties.Value) as [sales value], COUNT(Properties.record_id) as [property count]
FROM HeadOffice ho INNER JOIN Properties ON clients.head_office_code = ho.id
WHERE Somecondition
GROUP BY ho.ID,ho.honame,ho_status ORDER BY ho_status) x

Если вы хотите подсчитать плюс ваши столбцы, используйте over:

SELECT 
    count(1) over () as NumRows,
    x.ID,
    x.ho_status,
    x.[sales value],
    x.[property count]
from
(SELECT DISTINCT ho.ID,ho.honame,ho.ho_status,SUM(Properties.Value) as [sales value], COUNT(Properties.record_id) as [property count]
FROM HeadOffice ho INNER JOIN Properties ON clients.head_office_code = ho.id
WHERE Somecondition
GROUP BY ho.ID,ho.honame,ho_status ORDER BY ho_status) x
2 голосов
/ 09 января 2012

Вы получите еще 1 строку в ваш список, который содержит нулевые значения для всего, кроме количества свойств и значения свойств.Эта запись будет иметь количество и сумму всех значений свойств.

SELECT DISTINCT ho.ID,ho.honame,ho.ho_status, 
SUM(Properties.Value) as [sales value], 
COUNT(Properties.record_id) as [property count]
FROM HeadOffice ho 
INNER JOIN Properties 
  ON clients.head_office_code = ho.id
WHERE Somecondition
GROUP BY Grouping sets((ho.ID,ho.honame,ho_status),()) 
ORDER BY ho_status
0 голосов
/ 09 января 2012

Это должно работать

SELECT COUNT(ID) 
FROM (
SELECT DISTINCT ho.ID,ho.honame,ho.ho_status,
       SUM(Properties.Value) as [sales value], 
       COUNT(Properties.record_id) as [property count]
FROM HeadOffice ho 
     INNER JOIN Properties ON clients.head_office_code = ho.id
WHERE Somecondition
GROUP BY ho.ID, ho.honame, ho_status ) t
...