我有这样的MySQL查询:
SELECT *, SUM(...some SQL removed for brevety) AS Occurrences FROM some_table AS q
WHERE criterion="value" GROUP BY q.P_id ORDER BY Occurrences DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
我想将结果限制为Occurrences> 0的行.这对我来说似乎很简单,但我似乎无法使其发挥作用.无论我尝试什么,WHERE或HAVING,每当我尝试添加这个限制时,我得到NO ROWS作为回报.我很肯定我的表中有数据应该返回.有谁知道如何完成我正在做的事情?
我试过这个,但它仍然无效.任何想法为什么它仍然无法运作?
SELECT *, SUM(...some SQL removed for brevety) AS Occurrences FROM some_table AS q
WHERE criterion="value" HAVING SUM(...some SQL removed for brevety)>0 GROUP BY q.P_id ORDER BY Occurrences DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud) 所以通常你可以做到
SELECT COUNT(field.id) FROM table WHERE field.id > 100
Run Code Online (Sandbox Code Playgroud)
和COUNT(字段)将返回具有field.id> 100标准的条目数
但是,如果您计算使用HAVING标准指定的条目,例如
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
Run Code Online (Sandbox Code Playgroud)
在这种情况下代码不起作用....
如何计算通过HAVING子句指定其条件的条目?
提前致谢
我需要一点帮助让这个脚本做我想要的.
SELECT KM.initials,
TPL.debprice,
TMP.pricegroup,
TMP.date
FROM klientmedarbejder KM
INNER JOIN timeprismedarbejderprisgruppe TMP
ON KM.employeeno = TMP.employeeno
INNER JOIN timeprisprisgruppelinie TPL
ON TMP.pricegroup = TPL.pricegroup
GROUP BY KM.initials,
TMP.date,
TPL.debprice,
TMP.pricegroup,
TPL.date
HAVING ( Max(TMP.dato) = TPL.date )
Run Code Online (Sandbox Code Playgroud)
我需要的是具有最新(最大)日期的debPrice.一名员工经历了他的职业生涯,偶尔他的价格会升级.价格从一组价格中选择.
KlientMedarbejder 是员工表. TimeprisMedarbejderPrisgruppe 是他的记录升级到新价格的日期列表. TimeprisPrisgruppeLinie 是您可以拥有的价格列表. 我的解决方案是每位员工最多2个选项.因此:
emp A - 300 - 9 - 1900-01-01
emp A - 500 - 4 - 2012-01-01
emp B - 400 - 6 - 1900-01-01
emp B - 800 - 8 - 2012-04-01
Run Code Online (Sandbox Code Playgroud)
因此,第一条记录是他加入公司时的默认记录.2012年,他终于有了足够好的价格.现在,我需要在每个员工的升级列表上找到最新日期的答案.因此,emp A应该给我500,而emp …
我遇到了SQL查询的问题.有问题的查询如下所示:
SELECT TOP 3 r2.fdtmFilingPeriod
FROM TBLRETURN r2
WHERE r2.fstrDocType = 'RT3001'
AND r2.FLNGVER = 0
AND r2.fstrStatus in ('RCVD', 'SUS')
--AND r2.flngAccountKey = 669 --has one row in the table -- should return 0 rows
AND r2.FLNGACCOUNTKEY = 265 --has several rows the table -- should return 3 rows
GROUP BY r2.fdtmFilingPeriod
--HAVING COUNT(r2.fdtmFilingPeriod) > 2
ORDER BY r2.FDTMFILINGPERIOD DESC;
Run Code Online (Sandbox Code Playgroud)
这里奇怪的是,当我取消注释HAVING子句时,我并没有完全得到数据库中的内容.运行上述查询时得到的是:
2013-12-31 00:00:00.000
2013-09-30 00:00:00.000
2013-06-30 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
这显然不止两行,但是当我取消注释HAVING子句时,我没有返回任何行.有人可以帮我弄清楚这里发生了什么吗?
我正在使用SQL Server 2008.
提前致谢.
是否有一种简洁的方法HAVING来检查所需的行是否在GROUP BY?
使用示例日期:
turtle_id name
1 Mike
2 Ralph
3 Leo
4 Don
Run Code Online (Sandbox Code Playgroud)
和
turtle_id crush_for
1 Pizza
1 April Oneil
2 April Oneil
3 Pizza
3 April Oneil
4 Pizza
4 Pizza
4 Science
4 April Oneil
Run Code Online (Sandbox Code Playgroud)
和SQL:
SELECT turtle.name
FROM turtle
JOIN turtle_crush ON turtle_crush.turtle_id = turtle.turtle_id
WHERE turtle_crush.crush_for IN ('Pizza', 'April Oneil')
GROUP BY turtle.turtle_id
HAVING (a crush on both "Pizza" and "April Oneil")
Run Code Online (Sandbox Code Playgroud)
我意识到我可以做类似的事情HAVING COUNT(*) > 1,但这会给Don(id 4)带来误报,因为他喜欢'Pizza'两次.
编辑: 只要添加一个 …
如何找到p_option_id为1和11的产品.
p_id p_option_id
100 1
100 2
100 3
101 1
101 2
101 11
101 12
Run Code Online (Sandbox Code Playgroud)
这应该回来了
p_id
101
Run Code Online (Sandbox Code Playgroud) 根据我的理解,GROUP BY将返回2个元组.
MODEL ITEM_TYPE PRICE
---------------------------- ------------------------------------- ----------
010-99-0101 BACKPACK 5329.1
626-21-1500 BACKPACK 1485.86
Run Code Online (Sandbox Code Playgroud)
平均价格的价值是,
AVG(PRICE)
----------
4858.014444
Run Code Online (Sandbox Code Playgroud)
因此,以下查询应筛选出较小的价格值.
SELECT item_type, MODEL, items.price
FROM ITEMS
WHERE MANUFACTURER_NAME = 'UWZ'
AND ITEM_TYPE = 'BACKPACK'
GROUP BY item_type, items.price, MODEL
HAVING ITEMS.PRICE > AVG(ITEMS.PRICE);
Run Code Online (Sandbox Code Playgroud)
所以,输出应该是:
MODEL ITEM_TYPE PRICE
---------------------------- ------------------------------------- ----------
010-99-0101 BACKPACK 5329.1
Run Code Online (Sandbox Code Playgroud)
但是,实际上,以下是输出:
产量
no rows selected
Run Code Online (Sandbox Code Playgroud)