簡體   English   中英

返回具有相同計數的所有值

[英]Return all values with same count

我有以下查詢

select id, nameOfPet, count(fed)
from petLover, pets
where id = 180 and petLover.nameOfPet = pets.nameOfPet
group by fed
order by fed desc;

所以查詢的作用是獲取一個人的身份,獲取他擁有的寵物的所有名稱,在同一個人的桌子上查看寵物並檢查哪些寵物被喂了多少次並輸出該人的身份證,寵物以及喂食的頻率。

現在我想只輸出最多喂養的寵物。 我當然可以使用limit 1 ,但我想輸出所有,如果幾個寵物的喂食數量是相同的。

嵌套查詢派生了計數。 除了只有一列,它與最外面的查詢相同。

select id, nameOfPet, count(fed)
from petLover, pets
where id = 180 and petLover.nameOfPet = pets.nameOfPet
group by fed
having count(fed) >= ALL (
    select count(fed)
    from petLover, pets
    where id = 180 and petLover.nameOfPet = pets.nameOfPet
    group by fed
)

您發布的查詢將無法運行; 你需要按id,nameOfPet進行分組。 這是個人偏好,但我也會指定您的聯接(以使其更易讀,更容易在連接類型之間進行更改):

SELECT id, nameOfPet, COUNT(p.fed)
FROM petLover pl
LEFT OUTER JOIN pets p ON pl.nameOfPet = p.nameOfPet
WHERE id = 180
GROUP BY id, nameOfPet
ORDER BY COUNT(p.fed)

LEFT OUTER JOIN將確保您返回petLover的所有結果,即使沒有被喂食(即如果沒有喂食,您將返回所有petLovers)。 如果您只想在喂食動物時想要結果,請將其更改回INNER JOIN。 這是一個修改過的查詢來執行您要查找的內容(基於行):

SELECT pl.id, pl.nameOfPet, COUNT(*)
FROM petLover pl
LEFT OUTER JOIN pets p ON pl.nameOfPet = p.nameOfPet
GROUP BY pl.id, pl.nameOfPet
HAVING COUNT(*) >= ALL (
    SELECT COUNT(*)
    FROM petLover pl
    LEFT OUTER JOIN pets p ON pl.nameOfPet = p.nameOfPet
    GROUP BY pl.id, pl.nameOfPet
)
ORDER BY COUNT(*) DESC

編輯

除了原始注釋中我的問題的答案之外,您應該能夠執行以下操作來修改上面的SQL:

SELECT pl.id, pl.nameOfPet, SUM(p.fed)
FROM petLover pl
LEFT OUTER JOIN pets p ON pl.nameOfPet = p.nameOfPet
GROUP BY pl.id, pl.nameOfPet
HAVING SUM(p.fed) >= ALL (
    SELECT SUM(p.fed)
    FROM petLover pl
    LEFT OUTER JOIN pets p ON pl.nameOfPet = p.nameOfPet
    GROUP BY pl.id, pl.nameOfPet
)
ORDER BY SUM(p.fed) DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM