mysql COUNT函数根据真列值对两列或更多列进行计数
我试图计算两列的赋值出现的次数。到目前为止,我使用的sql语句输出了错误的结果。看一看:mysql COUNT函数根据真列值对两列或更多列进行计数,mysql,count,Mysql,Count,我试图计算两列的赋值出现的次数。到目前为止,我使用的sql语句输出了错误的结果。看一看: SELECT UPPER(school.district) AS District_name, COUNT(DISTINCT task1.wp_status) AS Status_New, COUNT(task1.wp_type) AS Type_Bolehole FROM school RIGHT OUTER JOIN task1 ON school.s_name=tas
SELECT
UPPER(school.district) AS District_name,
COUNT(DISTINCT task1.wp_status) AS Status_New,
COUNT(task1.wp_type) AS Type_Bolehole
FROM school
RIGHT OUTER JOIN task1 ON school.s_name=task1.name
WHERE task1.wp_status="New" OR task1.wp_type="Bolehole"
GROUP BY district AND task1.wp_status="New" AND task1.wp_type="Bolehole"
ORDER BY district;
我使用的两个表格如下所示
School
s_name district
matero lusaka
kema lusaka
naka kabwe
task1
name wp_status wp_type
matero New Bolehole
kema New Bolehole
naka New ProtectedWell
预期产量
D_Name Status_New Type_Bolehole
KABWE 1 2
LUSAKA 2 0
试试这个
SELECT UPPER(school.district) AS District_name,
sum( task1.wp_status ="New") AS Status_New,
sum(task1.wp_type="Bolehole") AS Type_Bolehole FROM school
RIGHT OUTER JOIN task1 ON school.s_name=task1.name
WHERE task1.wp_status="New" OR task1.wp_type="Bolehole"
GROUP BY district
ORDER BY district;
此外,在预期结果集中,第一行的bolehole计数应为0,因为tasknaka
没有bolehole类型
你不需要一个合适的加入。。您只需要行的一个条件和
SELECT
UPPER(s.district) AS District_name,
SUM(case when t.wp_status = 'New' then 1 else 0 end) AS Status_New,,
SUM(case when t.wp_type = 'Bolehole' then 1 else 0 end) AS Type_Bolehole
FROM school s
LEFT JOIN task1 t ON s.s_name=t.name
WHERE t.wp_status = 'New' or t.wp_type = 'Bolehole'
GROUP BY District_name
ORDER BY District_name;
我建议这样编写查询:
SELECT UPPER(s.district) AS District_name,
SUM(t1.wp_status = 'New') AS Status_New,
SUM(t1.wp_type = 'Bolehole') AS Type_Bolehole
FROM school s JOIN
task1 t1
ON s.s_name = t1.name
WHERE t1.wp_status = 'New' or t1.wp_type = 'Bolehole'
GROUP BY UPPER(s.district)
ORDER BY District_Name;
这将进行以下更改:
- 表别名的引入使查询更易于读取和写入
更改为连接
。您在一个表上进行选择,而在另一个表上进行聚合,因此查询似乎希望两个表都匹配内部连接
基于分组依据
中使用的实际表达式选择
- 条件聚合用于获取两列计数
注意:这假设问题中的示例结果不正确。尝试将右外部联接更改为左联接。联接正常。我甚至可以使用WHERE子句。根据列值,计数部分存在问题。但是如果您没有正确加入,计数将不正确。我已更改,但仍然无法解决此问题。第二个表是一个包含更多列的表,因此右键连接Let's go伙计们。您的预期结果没有意义。。为什么卡布韦有两个?不是卢萨卡吗?我在用电话发帖,格式是别人写的。至少你有了这个想法。22分钟前你是怎么回答的?我刚看到你贴了?太好了!谢谢大家。@MKhalidJunaid,但我可以用一个向上的投票来抵消它:D,好了:)@MKhalidJunaid是的,我不知道谁会否决一个完美的答案。。让我困惑的是,WHERE对于数据来说是完全冗余的provided@JohnRuddell . . . 对。但是保留
where
子句可以使查询更高效,如果它可以使用索引(与三行无关,但其中一行假定实际数据更大)。。。哦,嘿,祝贺你打了20万