Vraag Een gemiddelde halen uit subquerywaarden of een andere statistische functie in SQL Server


Ik heb de SQL-instructie (SQL Server)


SELECT 
COUNT(ActionName) AS pageCount
FROM tbl_22_Benchmark
WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)<7
GROUP BY 
dateadd(dd,0, datediff(dd,0,CreationDate))

die de uitvoer produceert

PageCount
27
19
59

Nu zou ik het gemiddelde van al die cijfers willen krijgen met behulp van SQL. Blijkbaar geneste aggregatiefuncties zoals

(AVG (COUNT (PageCount)))

zijn niet toegestaan ​​en gebruiken een subquery zoals


SELECT AVG(pageCount) FROM
(
SELECT 
COUNT(ActionName) AS pageCount
FROM tbl_22_Benchmark
WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)<7
GROUP BY 
dateadd(dd,0, datediff(dd,0,CreationDate))
)

krijgt alleen een foutmelding Onjuiste syntaxis bij ')'. 

Hoe kan ik het gemiddelde van de rijen van pageCount krijgen?


18
2017-09-08 15:18


oorsprong


antwoorden:


Ik kan je hele vraag niet zien omdat deze niet correct gepost lijkt te zijn.

Ik denk echter dat uw probleem puur een gebrek aan een naam is voor uw afgeleide tabel / geneste subquery.

Geef het een alias, zoals MyTable in dit voorbeeld

SELECT
    AVG(pageCount)
FROM
(
    SELECT 
        COUNT(ActionName) AS pageCount
    FROM
        tbl_22_Benchmark
) MyTable

29
2017-09-08 15:25



in je tweede poging mis je a) en een alias:

SELECT AVG(pageCount) as AvgPageCount FROM
(
    SELECT 
    COUNT(ActionName) AS pageCount
    FROM tbl_22_Benchmark
    WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)
) t

3
2017-09-08 15:24



Voeg een subquery-alias toe

SELECT AVG(pageCount) 
FROM (SELECT COUNT(ActionName) AS pageCount
      FROM tbl_22_Benchmark
      WHERE DATEPART(dw,CreationDate)>1 
         AND DATEPART(dw,CreationDate) {Missing stuff here } ) AS Z

2
2017-09-08 15:25



Uw subquery moet een alias hebben, zoals hierin

SELECT AVG(pageCount) FROM
(
SELECT 
COUNT(ActionName) AS pageCount
FROM tbl_22_Benchmark
WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)<7
GROUP BY 
dateadd(dd,0, datediff(dd,0,CreationDate))
) AS t

2
2017-09-08 16:40



Allereerst moet je een voorwaarde aan het einde van de vraag toevoegen. Bijvoorbeeld:

WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate) < 10

2e, je hebt je beugel aan het einde niet gesloten. Ten derde moet je je innerlijke vraag benoemen.

Dit zou moeten werken

SELECT AVG(pageCount) FROM
( 
    SELECT 
    COUNT(ActionName) AS pageCount
    FROM tbl_22_Benchmark
    WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate) < 10
) myInnerTable

1
2017-09-08 15:26