谁吃的苹果比香蕉多?

Who ate more apples than banana?

对于下面的样本数据,请帮我找出吃苹果多于香蕉的人? 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');