MySQL - 来自行的PHP唯一值

时间:2016-08-29 18:04:51

标签: php mysql

我有这张桌子: 表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)。我希望那些包含两个,三个,四个国家的行被淘汰,并且只保留行中的第一个国家。 谢谢!

1 个答案:

答案 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 }})。