![](/img/trans.png)
[英]SQL Count number of true values from a row then multiply with another column
[英]SQL: How to display data with row values as column names and then count number of times ID per row value?
這是我的數據庫和小提琴設置:
CREATE TABLE PRODUCTS (
NAME varchar(20),
PRODUCT_ID int(3)
);
CREATE TABLE PAYMENT (
NAME varchar(20),
PAYMENT_ID int(4)
);
INSERT INTO PRODUCTS (NAME, PRODUCT_ID)
VALUES
("Apple", 1),
("Banana", 2),
("Watermelon", 3),
("Bread", 4),
("Milk", 5),
("Cake", 6),
("Candy", 7),
("Butter", 8),
("Carrot", 9),
("Tomato", 10);
INSERT INTO PAYMENT (NAME, PAYMENT_ID)
VALUES
("Banana", 85),
("Apple", 94),
("Banana", 94),
("Candy", 85),
("Banana", 105);
https://www.db-fiddle.com/f/5jsGYfWZ6pnzgf62Z5FA8L/0
我想我必須做一些計數(這里的 CASE 語句)。
我看到了一些關於樞軸的東西,但不確定?
是的,你是對的,這是一種可能性
當只有一種選擇時,我使用 IF。
SELECT
p.NAME
,SUM(IF(PAYMENT_ID = 85,1,0)) '85'
,SUM(IF(PAYMENT_ID = 94,1,0)) '94'
,SUM(IF(PAYMENT_ID = 105,1,0)) '105'
FROM PRODUCTS p LEFT JOIN PAYMENT pa ON p.NAME = pa.NAME
GROUP BY p.NAME;
兩個表之間的引用應該是 id 而不是名稱,名稱可能是唯一的,但數字需要的空間比文本少。
CREATE TABLE PRODUCTS ( NAME varchar(20), PRODUCT_ID int(3) ); CREATE TABLE PAYMENT ( NAME varchar(20), PAYMENT_ID int(4) ); INSERT INTO PRODUCTS (NAME, PRODUCT_ID) VALUES ("Apple", 1), ("Banana", 2), ("Watermelon", 3), ("Bread", 4), ("Milk", 5), ("Cake", 6), ("Candy", 7), ("Butter", 8), ("Carrot", 9), ("Tomato", 10); INSERT INTO PAYMENT (NAME, PAYMENT_ID) VALUES ("Banana", 85), ("Apple", 94), ("Banana", 94), ("Candy", 85), ("Banana", 105);
\n ✓\n\n ✓\n\n ✓\n\n ✓\n
SELECT p.NAME ,SUM(IF(PAYMENT_ID = 85,1,0)) '85' ,SUM(IF(PAYMENT_ID = 94,1,0)) '94' ,SUM(IF(PAYMENT_ID = 105,1,0)) '105' FROM PRODUCTS p LEFT JOIN PAYMENT pa ON p.NAME = pa.NAME GROUP BY p.NAME;
\n姓名 | 85 | 94 | 105\n :--------- | -: | -: | ——:\n蘋果 | 0 | 1 | 0\n香蕉 | 1 | 1 | 1\n面包 | 0 | 0 | 0\n黃油 | 0 | 0 | 0\n蛋糕 | 0 | 0 | 0\n糖果 | 1 | 0 | 0\n胡蘿卜 | 0 | 0 | 0\n牛奶 | 0 | 0 | 0\n番茄 | 0 | 0 | 0\n西瓜 | 0 | 0 | 0\n
db<> 在這里擺弄
MySQL有一個方便的快捷方式。 我建議:
SELECT p.NAME,
SUM(pa.PAYMENT_ID = 85) as payment_85,
SUM(pa.PAYMENT_ID = 94) as payment_94,
SUM(pa.PAYMENT_ID = 105) as payment_105
FROM PRODUCTS p LEFT JOIN
PAYMENT pa
ON p.NAME = pa.NAME
GROUP BY p.NAME;
當然,如果你不關心沒有付款的產品,你只需要一張桌子:
SELECT pa.NAME,
SUM(pa.PAYMENT_ID = 85) as payment_85,
SUM(pa.PAYMENT_ID = 94) as payment_94,
SUM(pa.PAYMENT_ID = 105) as payment_105
FROM PAYMENT pa
GROUP BY pa.NAME;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.