我有一张包含国家,地区和不同尺寸的表格。我试图为所有相等的区域总结一个特定的列,然后为每个国家显示它们。问题是,国家/地区在我的表格中不止一次出现,因为另一列是"消费类别"。
现在我的查询是:
SELECT main.country, main.region, (SELECT SUM(sec.share)
FROM data_xlsx_Hoja2 sec
WHERE sec.region = main.region AND sec.segment="lowest" AND sec.category="food") as total
FROM data_xlsx_Hoja2 main
结果如下:
+ --------+-------------------------+-------------------+ | country | region | total | + --------+-------------------------+-------------------+ | Albania | Europe and Central Asia | 8.152791917324066 | | Albania | Europe and Central Asia | 8.152791917324066 | | Albania | Europe and Central Asia | 8.152791917324066 | | Albania | Europe and Central Asia | 8.152791917324066 | | Albania | Europe and Central Asia | 8.152791917324066 | | Albania | Europe and Central Asia | 8.152791917324066 | | Albania | Europe and Central Asia | 8.152791917324066 | | Albania | Europe and Central Asia | 8.152791917324066 | | Albania | Europe and Central Asia | 8.152791917324066 | + --------+-------------------------+-------------------+
我需要我的查询来显示每个国家只有一个,但是已经显示查询的数字....我试图使用GROUP BY和SELECT DISTINCT,但查询只是继续加载,从不显示结果。该表有大约30000行。
有什么想法吗? 感谢!!!
答案 0 :(得分:1)
我的第一个观察是:你真的想要按地区或国家分享份额吗?这更有意义,看起来像这样:
SELECT h.region, h.country, SUM(h.share)
FROM data_xlsx_Hoja2 h
WHERE h.segment = 'lowest' AND h.category = 'food'
GROUP BY h.region, h.country;
如果您希望每个国家/地区地区总和,则需要获取国家/地区列表。像这样:
SELECT rc.*, r.region_share
FROM (SELECT DISTINCT h.region, h.country
FROM data_xlsx_Hoja2 h
) rc LEFT JOIN
(SELECT h.region, SUM(h.share) as region_share
FROM data_xlsx_Hoja2 h
WHERE h.segment = 'lowest' AND h.category = 'food'
GROUP BY h.region
) r
ON rc.region = r.region;
答案 1 :(得分:0)
试试这个,因为我理解你的问题,你需要这个
SELECT country, region, SUM(share) as total
FROM data_xlsx_Hoja2 sec WHERE sec.segment="lowest" AND sec.category="food"
group by country, region
请澄清您的问题,以便我们给出正确的答案
答案 2 :(得分:0)
可以预期国家/地区表和区域表。因此,我们必须首先从您的数据表创建一个国家/地区表:
select distinct country from data_xlsx_hoja2;
然后你想要每个地区的份额总和:
select region, sum(share) from data_xlsx_hoja2 group by region;
现在您想要将国家/地区加入其所在地区,但是oops ...在您的数据模型中,一个国家/地区可以属于不同的地区,因为没有国家/地区表格,每个国家/地区都有一条记录,每个国家/地区都有一个区域ID。同一个国家/地区可以data_xlsx_hoja2
显示在不同的地区。好吧,它甚至可以显得多种多样('阿尔巴尼亚','阿尔巴尼亚','阿尔巴尼亚共和国',......)现在是时候规范数据库了。
我们可以做的是在桌子上欺骗自己,生成一个包含区域的国家/地区表格:
select country, any_value(region) from data_xlsx_hoja2 group by country;
完整的查询:
select c.country, r.total_share
from (select country, min(region) as region from data_xlsx_hoja2 group by country) c
join (select region, sum(share) as total_share from data_xlsx_hoja2 group by region) r
using (region)
order by c.country;
将您的条件(segment = 'lowest' AND category = 'food'
)放在适当的位置。您是否只想显示具有匹配记录的国家/地区?或者你只是想从区域总和中排除这些记录?
无论如何,你应该真正修复你的数据模型: