所以我想在使用子查询时获得预期结果,但我的答案不会计划,下面是我的代码和结果以及我的预期结果
SELECT "Invoice"."BillingCountry", "Genre"."Name", COUNT("Track"."TrackId") FROM "Track"
INNER JOIN "Genre"
ON "Track"."GenreId" = "Genre"."GenreId"
INNER JOIN "InvoiceLine"
ON "Track"."TrackId" = "InvoiceLine"."TrackId"
INNER JOIN "Invoice"
ON "InvoiceLine"."InvoiceId" = "Invoice"."InvoiceId"
WHERE "Invoice"."BillingCountry" in ('USA', 'Canada', 'Brazil', 'france', 'Germany')
GROUP BY "Genre"."GenreId", "Invoice"."BillingCountry"
ORDER BY COUNT("Track"."TrackId") DESC
LIMIT 10
billingcountry | name | count
usa bat 50
canada bat 43
usa car 40
usa toy 39
germany bat 36
france bat 34
canada bike 20
usa fing 15
brazil bat 14
france shoe 10
预期结果
country | item | count
usa bat 50
canada bat 43
germany bat 36
france bat 34
brazil bat 14
我知道这里有类似的解决方案,但我不能让它们工作,如果有人可以提供帮助,我将不胜感激
最佳答案
您似乎想要每个国家/地区最受欢迎的类型。如果是这样,请使用DISTINCT ON
:
SELECT DISTINCT ON (i."BillingCountry") i."BillingCountry", g."Name", COUNT(*)
FROM "Track" t JOIN
"Genre" g
ON t."GenreId" = g."GenreId" JOIN
"InvoiceLine" il
ON t."TrackId" = il."TrackId" JOIN
"Invoice" i
ON il."InvoiceId" = i."InvoiceId"
WHERE i."BillingCountry" in ('USA', 'Canada', 'Brazil', 'France', 'Germany')
GROUP BY g."GenreId", i."BillingCountry"
ORDER BY i."BillingCountry", COUNT(*) DESC ;
请注意表别名如何使查询更易于编写和读取。我还会修复表定义,这样您就不必转义表和列名称——必须转义它们是一种非常非常糟糕的做法。
关于sql - 得到一个不同的行及其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66089690/