我的桌子
+---------+----------+---+
| id | a1 | a2 | a3 |
+---------+----+----+----+
| 1 | 1 | 0 | 0 |
| 2 | 0 | 1 | 0 |
| 3 | 1 | 1 | 1 |
| 4 | 1 | 1 | 0 |
+---------+----+----+----+
我想要的结果是: 梅赛德斯3 宝马3 福特1 大众2
查询我尝试过..
SELECT
IF(a1=1,'Mercedes',
IF(a2=1,'BMW',
IF(a3=1,'Ford',
IF(a4=1,'VW',
'NO')))) AS marke,
COUNT(autos.id) AS anzahl FROM autos
WHERE autos.land=de GROUP BY marke ORDER BY anzahl DESC
我得到了想要的结果,但是只有第一行才算正确。如何添加子查询来再次查询同一张表,以显示每个字段(a1,a2,a3)的正确计数
还有什么我尝试死的: 以下子查询也失败!
SELECT
IF(a1=1,'Mercedes',
IF(a2=1,'BMW',
IF(a3=1,'Ford',
IF(a4=1,'VW',
'NO')))) AS marke,
IF(a1=1,(SELECT COUNT( autos.id) FROM marke WHERE a1=1),
IF(a2=1,(SELECT COUNT( autos.id) FROM marke WHERE a2=1),
IF(a3=1,(SELECT COUNT( autos.id) FROM marke WHERE a3=1),
IF(a4=1,(SELECT COUNT( autos.id) FROM marke WHERE a4=1),
'NO')))) AS anzahl,
FROM autos
WHERE autos.land=de GROUP BY marke ORDER BY anzahl DESC
希望这使我的问题更容易理解。
答案 0 :(得分:0)
每个汽车品牌都使用列是设计表格的一种不好方法,因为它使数据的处理方式与您实际使用的方式完全相同。
没有每个品牌都有专栏;有一列将每辆车链接到特定品牌:
CREATE TABLE car_makes (
make_id bigint unsigned not null auto_increment primary key,
name varchar(64)
);
CREATE TABLE cars (
car_id bigint unsigned not null auto_increment primary key,
make_id bigint
);
INSERT INTO car_makes (name) VALUES ('Ford'), ('VW'), ('BMW'), ('Mercedes');
/* now let's create some cars that match your desired results */
INSERT INTO cars (make_id) SELECT make_id FROM car_makes;
INSERT INTO cars (make_id) SELECT make_id FROM car_makes WHERE name IN('VW', 'Mercedes', 'BMW');
INSERT INTO cars (make_id) SELECT make_id FROM car_makes WHERE name IN( 'Mercedes', 'BMW');
现在,您可以根据需要简单地按品牌分组:
SELECT name , count(*) from cars
JOIN car_makes ON ( car_makes.make_id = cars.make_id)
GROUP BY car_makes.make_id;
您将看到这如何帮助简化数据管理,并使查询更高效。
+----------+----------+
| name | count(*) |
+----------+----------+
| Ford | 1 |
| VW | 2 |
| BMW | 3 |
| Mercedes | 3 |
+----------+----------+
答案 1 :(得分:0)
选择SUM(a1)作为'Mercedes',sum(a2)作为'BMW',sum(a3)作为'FORD' 从汽车