谁吃的苹果比香蕉多?

问题描述 投票:1回答:2

对于以下示例数据,请帮助我找到吃苹果比香蕉多的人吗?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)
sql oracle group-by count
2个回答
2
投票

您可以使用聚合和带有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)

0
投票

是的,正如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');
© www.soinside.com 2019 - 2024. All rights reserved.