对于以下示例数据,请帮助我找到吃苹果比香蕉多的人吗?enter image description here
例如,如所附数据图像中所示,Jhon和Rita吃的苹果比香蕉多。我写了一个查询,但有一个内部查询。我在考虑替代最佳解决方案。
WITH DATA AS (
SELECT 'Jhon' name, 'Banana' FRUIT, SYSDATE eatingTime FROM dual UNION ALL
SELECT 'Jhon' name, 'Banana' FRUIT, SYSDATE eatingTime FROM dual UNION ALL
SELECT 'Jhon' name, 'Apple' FRUIT, SYSDATE eatingTime FROM dual UNION ALL
SELECT 'Jhon' name, 'Apple' FRUIT, SYSDATE eatingTime FROM dual UNION ALL
SELECT 'Jhon' name, 'Apple' FRUIT, SYSDATE eatingTime FROM dual UNION ALL
SELECT 'Rita' name, 'Apple' FRUIT, SYSDATE eatingTime FROM dual UNION ALL
SELECT 'Jack' name, 'Apple' FRUIT, SYSDATE eatingTime FROM dual UNION ALL
SELECT 'Jhon' name, 'Banana' FRUIT, SYSDATE eatingTime FROM dual
)
SELECT name FROM DATA p
WHERE
(SELECT count(*) FROM DATA b WHERE b.FRUIT= 'Banana' AND b.name = p.name) <
(SELECT count(*) FROM DATA a WHERE a.FRUIT= 'Apple' AND a.name = p.name)
您可以使用聚合和带有having
子句的过滤器:
select name
from data
group by name
having
sum(case when fruit = 'Apple' then 1 else 0 end)
> sum(case when fruit = 'Banana' then 1 else 0 end)
是的,正如GMB所说,您可以使用聚合+具有。另一种方法是:
select name
from data d1
group by name
having
(select count(fruit) from data d2 where d1.name = d2.name and fruit = 'apple')
> (select count(fruit) from data d2 where d1.name = d2.name and fruit = 'banana');