我有这张桌子: 表1
+----+-----------------------+----------+------+-------+
| ID | COUNTRY | QUANTITY | EACH | PRICE |
+----+-----------------------+----------+------+-------+
| 1 | U.S.A | 1 | 12 | 1*12 |
| 2 | U.K. | 2 | 3 | 2* 3 |
| 3 | GERMANY | NULL | 3 | |
| 4 | FRANCE;GERMANY; U.S.A | 0 | 7 | |
| 5 | U.S.A;GERMANY | 3 | 8 | 3*8 |
| 6 | FRANCE;U.K. | 1 | 10 | 1*10 |
| 7 | U.S.A;FRANCE | 2 | 6 | 2*6 |
| 8 | FRANCE;FRANCE | 9 | 3 | 9*3 |
+----+-----------------------+----------+------+-------+

和这段代码sql:
SELECT
COUNTRY,
SUM(COALESCE(IF(QUANTITY = NULL OR QUANTITY = 0,1,QUANTITY), 1) * EACH) AS PRICE
FROM table1
GROUP BY COUNTRY

如何为country列创建唯一值并返回:USA = 48(ID:1 + 5 + 7);英国= 6; GERMANY = 3;法国= 44(身份证号码:4 + 6 + 8)。我希望那些包含两个,三个,四个国家的行被淘汰,并且只保留行中的第一个国家。 谢谢!
答案 0 :(得分:4)
使用substring_index
获取;
- 分隔列表中的第一个国家/地区。
SELECT
SUBSTRING_INDEX(COUNTRY, ';', 1) AS COUNTRY
SUM(IF(QUANTITY IS NULL OR QUANTITY = 0,1,QUANTITY) * EACH) AS PRICE
FROM table1
GROUP BY COUNTRY
如果你想保留每个国家/地区出现的所有行,那将会复杂得多(在这种情况下,我建议在PHP中使用它,而不是MySQL,因为MySQL没有内置的方法{{1 }})。