我有一张桌子(finances_history)
这只是一张桌子,但为了向你展示我把它分成两个区块的内容,如下所示:
userID || month || bill || value ------------------------------------ u01 || 201401 || energy || 0 u01 || 201402 || energy || 0 ------------------------------------ u02 || 201401 || energy || 0 u02 || 201402 || energy || 0 ------------------------------------ u03 || 201401 || energy || 75 u03 || 201402 || energy || 0 ------------------------------------ u04 || 201401 || energy || 90 u04 || 201402 || energy || 90 ------------------------------------ u05 || 201401 || energy || 85 u05 || 201402 || energy || 90 ------------------------------------ u06 || 201401 || energy || 0 u06 || 201402 || energy || 0 ------------------------------------
userID || month || bill || value ------------------------------------ u01 || 201401 || rent || 300 u01 || 201402 || rent || 300 ------------------------------------ u02 || 201401 || rent || 350 u02 || 201402 || rent || 400 ------------------------------------ u03 || 201401 || rent || 0 u03 || 201402 || rent || 0 ------------------------------------ u04 || 201401 || rent || 0 u04 || 201402 || rent || 0 ------------------------------------ u05 || 201401 || rent || 0 u05 || 201402 || rent || 0 ------------------------------------ u06 || 201401 || rent || 0 u06 || 201402 || rent || 0 ------------------------------------
此表上有不同的用户,但它记录了一年中不同月份的信息(在这种情况下只有两个月,1月 - 201401年和2月 - 201402年)。
同一个用户也可以有两种不同类型的账单(在这种情况下只有两种不同的能源和租金),但如果用户有一张账单要支付(至少在一个月内,或两者兼而有之,他将不会有另一个账单(两个月内其他账单上的值将为0)......或者我可以让两个月内两个账单的价值均为0的用户。
我只需要“选择”具有至少一个价值不同于0的票据的用户(userID)(考虑4行,两个月)和票据的值(不是0)两个月都是一样的。
所以,我正在寻找的是一个“SELECT”,在我上面的样本中,可以给我用户u01和u04(唯一符合标准的人,至少一个价值不同于0的账单)至少有一个月和这些值是相等的。)
用户u01是SELECTED,因为在201401和201402个月的帐单租金具有相同的价值。
未选择用户u02,因为该帐单在201401和201402个月租用了不同的值。
未选择用户u03,因为201401和201402月的账单能量值不同。
用户u04被选中,因为在201401和201402个月的账单能量具有相同的值。
未选择用户u05,因为201401和201402月的账单能量值不同。
未选择用户u06,因为201401和201402两个账单(能源和租金)的值均为0。
我希望有人可以帮助我 Ps。:它是一个MS SQL Server。
感谢。
答案 0 :(得分:0)
一些统计功能对此有帮助。
SELECT DISTINCT userID
FROM Utilities
GROUP BY userID, bill
HAVING AVG(value) > 0
AND STDEV(value) = 0
ORDER BY userID
AVG
是平均值,条件是账单类型的平均值大于0。
STDEV
是标准差,长话短说,只有当组中的每个值相同时,标准差才为0。
compount条件是让我获得始终支付相同账单的独特用户ID。
STDEV
可以用于同一组中的任意数量的行(查询可以使用超过两个月的数据正常工作)