簡體   English   中英

MySQL子查詢使用GROUP BY計數多列

[英]MySQL Subquery to count multiple columns with GROUP BY

我的桌子

+---------+----------+---+
| 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

希望這使我的問題更容易理解。

在每種汽車上都使用列是設計表格的一種不好的方法,因為它使數據的處理方式與您所經歷的方式完全相同。

沒有每個品牌都有專欄; 有一列將每輛車鏈接到特定品牌:

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 |
+----------+----------+

從汽車中選擇SUM(a1)AS'Mercedes',sum(a2)AS'BMW',sum(a3)AS'FORD'

暫無
暫無

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

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