У меня есть эта таблица: таблица 1
+----+-----------------------+----------+------+-------+ | ID | COUNTRY | QUANTITY | EACH | PRICE | +----+-----------------------+----------+------+-------+ | 1 | USA | 1 | 12 | 1*12 | | 2 | UK | 2 | 3 | 2* 3 | | 3 | GERMANY | NULL | 3 | | | 4 | FRANCE;GERMANY; USA | 0 | 7 | | | 5 | USA;GERMANY | 3 | 8 | 3*8 | | 6 | FRANCE;UK | 1 | 10 | 1*10 | | 7 | USA;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
Как я могу сделать уникальные значения для столбца страны и вернуть: USA = 48 (ID: 1 + 5 + 7); UK = 6; ГЕРМАНИЯ = 3; ФРАНЦИЯ = 44 (ID: 4 + 6 + 8). Я хочу, чтобы строки, содержащие две, три, четыре страны, были ликвидированы и оставались только первой страной из ряда. Спасибо!
Используйте 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 не имеет встроенного способа делать explode()
).