Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 分组后平均价格中有多个重复项_Sql_Sql Server - Fatal编程技术网

Sql 分组后平均价格中有多个重复项

Sql 分组后平均价格中有多个重复项,sql,sql-server,Sql,Sql Server,我正在写一个查询,以生成一个药物列表及其平均价格 我的桌子看起来像: CREATE TABLE [dbo].[drugPurchases]( [importId] [bigint] IDENTITY(1,1) NOT NULL, [importDate] [datetime] NOT NULL, [rxNumber] [float] NULL, [accountNumber] [nvarchar](255) NULL, [lastName] [nvarch

我正在写一个查询,以生成一个药物列表及其平均价格

我的桌子看起来像:

CREATE TABLE [dbo].[drugPurchases](
    [importId] [bigint] IDENTITY(1,1) NOT NULL,
    [importDate] [datetime] NOT NULL,
    [rxNumber] [float] NULL,
    [accountNumber] [nvarchar](255) NULL,
    [lastName] [nvarchar](255) NULL,
    [firstName] [nvarchar](255) NULL,
    [dob] [datetime] NULL,
    [ssn] [nvarchar](10) NULL,
    [drugName] [nvarchar](255) NULL,
    [drugStrength] [nvarchar](255) NULL,
    [dosage] [nvarchar](255) NULL,
    [quantityDispensed] [float] NULL,
    [price] [float] NULL,
    [facilityCode] [nvarchar](255) NULL,
    [fillDate] [datetime] NULL,
    [processed] [bit] NOT NULL
一种名为“依那普利”的特定药物的一些样本数据

结果:

ENALAPRIL   10MG    TAB 60  1.14
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 180 3.42
ENALAPRIL   10MG    TAB 120 2.28
ENALAPRIL   10MG    TAB 240 31.18
ENALAPRIL   10MG    TAB 300 38.97
ENALAPRIL   10MG    TAB 240 31.18
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 120 15.59
ENALAPRIL   10MG    TAB 120 15.59
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 60  1.14
ENALAPRIL   10MG    TAB 60  1.14
ENALAPRIL   10MG    TAB 60  1.14
ENALAPRIL   10MG    TAB 60  1.14
ENALAPRIL   10MG    TAB 60  1.14
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 60  7.79
ENALAPRIL   10MG    TAB 180 3.42
我的目标是得到依那普利每种药物的平均价格。我的问题是:

SELECT
    distinct(drugName),
    drugStrength,
    dosage,
    ROUND(price / quantityDispensed, 2) as 'calc'
FROM
    drugPurchases
where
    fillDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
    and drugName = 'ENALAPRIL'
    and drugStrength = '10MG'
GROUP BY
    drugName,
    drugStrength,
    dosage,
    (price / quantityDispensed)
ORDER BY
    drugName,
    drugStrength
但我的结果是10MG依那普利有两种不同的价格:

ENALAPRIL   10MG    TAB 0.02
ENALAPRIL   10MG    TAB 0.13

你知道它为什么要这样做,以及我需要如何调整我的查询吗?

看起来它在药品采购中是由两个单独的条目分组的,因此在你的分组中是由

(price / quantityDispensed)
您可以使用SUM(price/quantityDispensed)将这两个值相加,然后按移除组

SELECT
    drugName,
    drugStrength,
    dosage,
    ROUND(
    Avg(price / quantityDispensed), 2) as 'calc'
FROM
    drugPurchases
where
    fillDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
    and drugName = 'ENALAPRIL'
    and drugStrength = '10MG'
GROUP BY
    drugName,
    drugStrength,
    dosage,
ORDER BY
    drugName,
    drugStrength

看起来它是由两个单独的条目在药品采购中分组的,因此在您的分组中

(price / quantityDispensed)
您可以使用SUM(price/quantityDispensed)将这两个值相加,然后按移除组

SELECT
    drugName,
    drugStrength,
    dosage,
    ROUND(
    Avg(price / quantityDispensed), 2) as 'calc'
FROM
    drugPurchases
where
    fillDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
    and drugName = 'ENALAPRIL'
    and drugStrength = '10MG'
GROUP BY
    drugName,
    drugStrength,
    dosage,
ORDER BY
    drugName,
    drugStrength

看起来它是由两个单独的条目在药品采购中分组的,因此在您的分组中

(price / quantityDispensed)
您可以使用SUM(price/quantityDispensed)将这两个值相加,然后按移除组

SELECT
    drugName,
    drugStrength,
    dosage,
    ROUND(
    Avg(price / quantityDispensed), 2) as 'calc'
FROM
    drugPurchases
where
    fillDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
    and drugName = 'ENALAPRIL'
    and drugStrength = '10MG'
GROUP BY
    drugName,
    drugStrength,
    dosage,
ORDER BY
    drugName,
    drugStrength

看起来它是由两个单独的条目在药品采购中分组的,因此在您的分组中

(price / quantityDispensed)
您可以使用SUM(price/quantityDispensed)将这两个值相加,然后按移除组

SELECT
    drugName,
    drugStrength,
    dosage,
    ROUND(
    Avg(price / quantityDispensed), 2) as 'calc'
FROM
    drugPurchases
where
    fillDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
    and drugName = 'ENALAPRIL'
    and drugStrength = '10MG'
GROUP BY
    drugName,
    drugStrength,
    dosage,
ORDER BY
    drugName,
    drugStrength

您是按价格/数量分组的,因此每个价格/数量结果将生成一个单独的返回行。在价格/数量中使用聚合,并将其从分组中移除。我希望这也有同样的结果:

SELECT
   distinct(drugName),
   drugStrength,
   dosage,
   ROUND(avg(price / quantityDispensed), 2) as 'calc'
FROM
   drugPurchases
where
   fillDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
   and drugName = 'ENALAPRIL'
   and drugStrength = '10MG'
GROUP BY
   drugName,
   drugStrength,
   dosage
ORDER BY
   drugName,
   drugStrength

您是按价格/数量分组的,因此每个价格/数量结果将生成一个单独的返回行。在价格/数量中使用聚合,并将其从分组中移除。我希望这也有同样的结果:

SELECT
   distinct(drugName),
   drugStrength,
   dosage,
   ROUND(avg(price / quantityDispensed), 2) as 'calc'
FROM
   drugPurchases
where
   fillDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
   and drugName = 'ENALAPRIL'
   and drugStrength = '10MG'
GROUP BY
   drugName,
   drugStrength,
   dosage
ORDER BY
   drugName,
   drugStrength

您是按价格/数量分组的,因此每个价格/数量结果将生成一个单独的返回行。在价格/数量中使用聚合,并将其从分组中移除。我希望这也有同样的结果:

SELECT
   distinct(drugName),
   drugStrength,
   dosage,
   ROUND(avg(price / quantityDispensed), 2) as 'calc'
FROM
   drugPurchases
where
   fillDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
   and drugName = 'ENALAPRIL'
   and drugStrength = '10MG'
GROUP BY
   drugName,
   drugStrength,
   dosage
ORDER BY
   drugName,
   drugStrength

您是按价格/数量分组的,因此每个价格/数量结果将生成一个单独的返回行。在价格/数量中使用聚合,并将其从分组中移除。我希望这也有同样的结果:

SELECT
   distinct(drugName),
   drugStrength,
   dosage,
   ROUND(avg(price / quantityDispensed), 2) as 'calc'
FROM
   drugPurchases
where
   fillDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
   and drugName = 'ENALAPRIL'
   and drugStrength = '10MG'
GROUP BY
   drugName,
   drugStrength,
   dosage
ORDER BY
   drugName,
   drugStrength


它这样做是因为有两种不同的“计算”价格。1.14/60得到0.019(四舍五入时为0.02),7.79/60=0.1289或0.13。我尝试了其他一些变体,它们都归结为这两个数字中的一个。简而言之,当涉及到每便士的不同数量时,药品生产商有两种不同的价格。它这样做是因为有两种不同的“计算”价格。1.14/60得到0.019(四舍五入时为0.02),7.79/60=0.1289或0.13。我尝试了其他一些变体,它们都归结为这两个数字中的一个。简而言之,当涉及到每便士的不同数量时,药品生产商有两种不同的价格。它这样做是因为有两种不同的“计算”价格。1.14/60得到0.019(四舍五入时为0.02),7.79/60=0.1289或0.13。我尝试了其他一些变体,它们都归结为这两个数字中的一个。简而言之,当涉及到每便士的不同数量时,药品生产商有两种不同的价格。它这样做是因为有两种不同的“计算”价格。1.14/60得到0.019(四舍五入时为0.02),7.79/60=0.1289或0.13。我尝试了其他一些变体,它们都归结为这两个数字中的一个。简言之,药品生产商在每便士的不同数量上有两种不同的价格。我同意,但你也可以放弃distinct(),因为它是多余的。谢谢你的回答tworoswell,但是做一个手工计算,我看到总共分配了2460个
数量
,总成本为226.37美元,平均价格为0.09美元。你的答案给出了每剂2.12美元的价格。你需要取平均值,而不是取平均值之和:四舍五入(总和(价格)/总和(分配的数量),2)作为“计算”,或者只使用平均值而不是总和。我已经对我的答案做了更改。我同意,但是你也可以删除distinct(),因为它是多余的。谢谢你的答案tworoswell,但是做了一个手动计算,我看到总共分配了2460个
quantity
,总成本为226.37美元,平均价格为.09美元。你的答案给出了每剂2.12美元的价格。你需要取平均值,而不是取平均值之和:四舍五入(总和(价格)/总和(分配的数量),2)作为“计算”,或者只使用平均值而不是总和。我已经对我的答案做了更改。我同意,但是你也可以删除distinct(),因为它是多余的。谢谢你的答案tworoswell,但是做了一个手动计算,我看到总共分配了2460个
quantity
,总成本为226.37美元,平均价格为.09美元。你的答案给出了每剂2.12美元的价格。你需要取平均值,而不是取平均值之和:四舍五入(总和(价格)/总和(分配的数量),2)作为“计算”,或者只使用平均值而不是总和。我已经对我的答案做了更改。我同意,但是你也可以删除distinct(),因为它是多余的。谢谢你的答案tworoswell,但是做了一个手动计算,我看到总共分配了2460个
quantity
,总成本为226.37美元,平均价格为.09美元。你的答案给出了每剂2.12美元的价格。你需要取平均值,而不是取平均值之和:四舍五入(总和(价格)/总和(分配的数量),2)作为“计算”,或者只使用平均值而不是总和。我对我的答案作了修改。